كيف يمكنني تشغيل Tomcat 5.5 خلف Apache 2 مع مرور mod_rewrite عبر الطلبات إلى mod_jk وتجريد سياق التطبيق؟

StackOverflow https://stackoverflow.com/questions/208261

سؤال

حسنًا، أريد تشغيل تطبيق ويب في Tomcat (5.5) ليتم تشغيله خلف Apache 2 (2.2.3 على وجه الدقة) الذي يعمل من جذر الموقع (أي.بدون السياق)، مع تقديم محتوى ثابت عبر Apache.

لذلك إذا كان التطبيق يعمل ضمن "/myapp"في Tomcat أريد استخدام Apache (plus mod_rewrite) لجعله يتصرف كما لو كان يعمل تحت "/" بدلاً من.

Mod_jk تم الإعداد ويعمل بشكل جيد.يمكنني الوصول إلى التطبيق من "/myapp"، لكن لا يمكنني تشغيل الجزء الأخير تمامًا.فيما يلي التكوين الذي حصلت عليه mod_rewrite لمحاولة الحصول على هذا العمل.يتم إعادة كتابته بشكل صحيح /static/ عناوين URL للحصول على Apache لخدمتها من تطبيق الويب الذي تم فك حزمته، وإذا قمت بتمكين سجل إعادة الكتابة، أرى أنه يحاول تمرير جميع الطلبات الأخرى إلى /myapp عبر mod_jk.ولكن يبدو أن mod_jk لا يقوم بمعالجة الطلب بعد ذلك.


JkMount /myapp/*      worker1

RewriteEngine On

# ensure static stuff gets served by apache
RewriteRule ^/static/(.*)$ /var/lib/tomcat5.5/webapps/myapp/static/$1 [L]
# everything else should go through tomcat
RewriteRule ^/(.*)$ /myapp/$1 [L,PT]

عندما قمت بذلك مع Apache 1 في الماضي، كان علي التأكد mod_jk الحصول على محملة من قبل mod_rewrite, ، لكن يبدو أنني لا أستطيع تحقيق ذلك في ظل Apache 2.أي أفكار؟كيف يفعل الآخرون هذا عادة؟

هل كانت مفيدة؟

المحلول

وتمكنت من الحصول على هذا العمل في نهاية المطاف. ويبدو أنني بحاجة لوضع JkOption إلى:


JkOptions     +ForwardURICompat

وبعد ذلك، ينظر mod_jk في URL إعادة كتابة. يجب أن أعترف لست متأكدا 100٪ تماما لماذا هذا يعمل، ولكن أعتقد أنه بالعودة إلى شكل من كبار السن من السلوك. إذا كان أي شخص يمكن أن يقول لي طريقة أفضل / أكثر الصحيحة للقيام بذلك أحب أن أعرف.

نصائح أخرى

قد يكون من الأفضل استخدام أباتشي لوكيل بدلا من mod_jk. شيء من هذا القبيل:

وProxy Pass للبلوغ / ثابت / HTTP: // المضيف المحلي: 8080 / اسم التطبيق / ثابت /

قد يكون أسهل أو أكثر شفافية ماذا يحدث إذا كنت تستخدم إما القط المضيفين الظاهري أو الروابط المختلفة للمضيفين مختلفة، ومجرد نشر التطبيقات الجذر (في "/") والإعداد أباتشي mod_jk إحالتها إلى الروابط المختلفة أو المضيفين الظاهري.

ملحوظة: عندما كنت في حاجة الى هذا لقد عملت مع الروابط المختلفة المضيفين مختلفة هر أو محركات (لا أتذكر) والتطبيقات ROOT نشرها. لقد حاولت أبدا المضيفين الظاهري (اسم القائم) في هر، التخمين فقط أن هذا يمكن أن تنجح.

والفائدة: عدم وجود ترجمة المسار، وبالتالي أسهل كثيرا لفهم مرة واحدة لديك لإجراء تغييرات على أشهر التثبيت بعد النشر الأولي

.

وأنا أعترف أنه يشعر غريب نوعا ما، ولكن الفائدة من قراءة يستحق الكثير بالنسبة لي.

نستخدم علامة "R" بدلاً من "PT":

RewriteRule ^/(.*)$ /myapp/$1 [L,R]

يحرر:لقد فاتني نقطة عدم تغيير عنوان URL الذي يراه المستخدم.الطريقة البديلة هي القيام بما يلي:

JkMount /* worker1
JkUnmount /static/* worker1

إذن لن تحتاج إلى RewriteRule.

ووفقا ل موقع أباتشي تومكات الإعدادات الافتراضية الجديدة لـ mod_jk غير متوافقة مع mod_rewrite ويجب عليك استخدام +ForwardURICompatUnparsed.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top