ฉันปรับใช้ Apache หน้าแอปพลิเคชันที่โฮสต์โดย Karaf (Apache และ Karaf อยู่บนเซิร์ฟเวอร์ที่แยกต่างหาก) ฉันต้องการ Apache ให้ทำงานเป็น reverse proxy และซ่อนบางส่วนของ URL
URL ที่จะได้รับเข้าสู่ระบบในหน้าของแอพลิเคชันโดยตรงจากเซิร์ฟเวอร์ app http://app-server:8181/jellyfish
เป็น หน้าจะให้บริการโดย Jetty instance ที่ทำงานภายใน Karaf แน่นอนว่าพฤติกรรมนี้มักจะถูกปิดกั้นโดยไฟร์วอลล์สำหรับทุกอย่างยกเว้นพร็อกซีเซิร์ฟเวอร์ย้อนกลับ
เมื่อปิดไฟร์วอลล์หากคุณกด URL นี้ Jetty จะโหลดหน้าเข้าสู่ระบบ แถบที่อยู่ของเบราว์เซอร์เปลี่ยนไปอย่างถูกต้องhttp://app-server:8181/jellyfish/login?0
และทุกอย่างทำงานได้
สิ่งที่ฉันต้องการคือhttp://web-server
(เช่นจากรูท) เพื่อแม็พกับ Jetty บนเซิร์ฟเวอร์แอปด้วยชื่อของแอพ ( jellyfish
) ที่ถูกระงับ เช่นเบราว์เซอร์จะเปลี่ยนไปแสดงhttp://web-server/login?0
ในแถบที่อยู่และ URL และเนื้อหาที่ตามมาทั้งหมดจะแสดงพร้อมกับโดเมนของเว็บเซิร์ฟเวอร์และไม่มีjellyfish
ความยุ่งเหยิง
ฉันสามารถให้ Apache ทำงานเป็น reverse proxy อย่างง่ายโดยใช้ config (ตัวอย่าง): -
ProxyPass /jellyfish http://app-server:8181/jellyfish
ProxyPassReverse / http://app-server:8181/
... แต่สิ่งนี้ต้องการ URL ของเบราว์เซอร์ที่จะมีjellyfish
และไปที่ URL ราก ( http://web-server
) ให้ 404 ไม่พบ
ฉันใช้เวลาส่วนใหญ่พยายามที่จะใช้ทั้งที่mod_rewrite
มีและไม่มี[P]
ธงเพื่อรับสิ่งนี้ แต่ก็ไม่ประสบความสำเร็จ จากนั้นฉันก็ลองใช้ProxyPassMatch
คำสั่ง แต่ฉันก็ไม่สามารถแก้ไขให้ถูกต้องได้
นี่คือการกำหนดค่าปัจจุบันตามที่โหลดไว้/etc/apache2/sites-available/
บนเว็บเซิร์ฟเวอร์ โปรดทราบว่ามีไดเรกทอรีรูปภาพที่โฮสต์ในเครื่อง ฉันยังคงปกป้องการใช้ประโยชน์พร็อกซี mod_rewriteและฉันกำลังระงับmod_security
กฎบางอย่างที่ให้ผลบวกปลอม
<VirtualHost *:80>
ServerAdmin admin@drummer-server
ServerName drummer-server
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
CustomLog ${APACHE_LOG_DIR}/access.log combined
Alias /images/ "/var/www/images/"
RewriteEngine On
RewriteCond %{REQUEST_URI} !^$
RewriteCond %{REQUEST_URI} !^/
RewriteRule .* - [R=400,L]
ProxyPass /images !
ProxyPassMatch ^/(.*) http://granny-server:8181/jellyfish/$1
ProxyPassReverse / http://granny-server:8181/jellyfish
ProxyPreserveHost On
SecRuleRemoveById 981059 981060
<Directory "/var/www/images">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
ถ้าผมไปhttp://web-server
ผมได้รับการเปลี่ยนเส้นทางไปhttp://web-server/jellyfish/home
แต่นี้จะช่วยให้ 404 ที่มีการร้องเรียนเกี่ยวกับการพยายามที่จะเข้าถึง/jellyfish/jellyfish/home
- NB /jellyfish
แถบที่อยู่ของเบราว์เซอร์ไม่ได้มีคู่
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/home. Reason:
Not Found
และถ้าผมไปhttp://web-server/login
ผมได้รับการเปลี่ยนเส้นทางไปhttp://web-server/jellyfish/login?0
แต่นี้จะช่วยให้ 404 /jellyfish/jellyfish/login
ที่มีการร้องเรียนเกี่ยวกับการพยายามที่จะเข้าถึง
HTTP ERROR 404
Problem accessing /jellyfish/jellyfish/login. Reason:
Not Found
ดังนั้นฉันเดาว่าฉันผ่านกฎสองครั้ง ฉันรู้สึกสับสนเล็กน้อยกับที่มาของhome
บิตในตัวอย่างแรก
มีคนบอกฉันในทิศทางที่ถูกต้องได้ไหม
ขอบคุณเจ
ProxyPassMatch
ด้วยการใช้เทียบเท่าmod_rewrite
ซึ่งอยู่ที่ความท้าทายของการลบออกjellyfish
จาก URL ตอนนี้ฉันกำลังพิจารณาจำนวน 404 วินาทีที่ปรากฏขึ้นมาเกี่ยวกับองค์ประกอบพื้นฐานเช่นองค์ประกอบของ Wicket ที่ Karaf ต้องการ นี่เป็นข้อมูลโค้ด:# proxy to the Jellyfish server (ignoring images) RewriteCond %{REQUEST_URI} !^/(images)(.*)$ RewriteRule ^(/.*)$ http://app-server:8181/jellyfish$1 [P] ProxyPassReverse / http://app-server:8181/jellyfish/