ฉันปรับใช้ 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/