كيف يمكنني تشغيل Tomcat 5.5 خلف Apache 2 مع مرور mod_rewrite عبر الطلبات إلى mod_jk وتجريد سياق التطبيق؟
-
03-07-2019 - |
سؤال
حسنًا، أريد تشغيل تطبيق ويب في 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
.