मैं अपाचे को एक Karaf द्वारा होस्ट किए गए एप्लिकेशन के सामने तैनात कर रहा हूं (Apache और Karaf अलग-अलग सर्वर पर हैं)। मैं चाहता हूं कि अपाचे एक रिवर्स प्रॉक्सी के रूप में काम करे और यूआरएल के हिस्से को भी छिपाए।
एप्लिकेशन सर्वर से सीधे एप्लिकेशन के लॉग-इन पृष्ठ प्राप्त करने के लिए URL है http://app-server:8181/jellyfish
। करफ के भीतर चल रहे जेट्टी उदाहरण द्वारा पृष्ठ परोसे जाते हैं। बेशक, यह व्यवहार आमतौर पर रिवर्स प्रॉक्सी सर्वर को छोड़कर सब कुछ के लिए फ़ायरवॉल द्वारा अवरुद्ध किया जाएगा।
फ़ायरवॉल बंद होने पर, यदि आप इस URL को हिट करते हैं तो जेट्टी लॉग-इन पृष्ठ को लोड करता है। ब्राउज़र का पता बार सही तरीके से बदलता है http://app-server:8181/jellyfish/login?0
और सब कुछ काम करता है।
जो मैं चाहता हूं http://web-server
(रूट से यानी) के लिए ऐप सर्वर पर जेट्टी से मैप करने के लिए ऐप के नाम के साथ ( jellyfish
) दबा हुआ है। उदा। http://web-server/login?0
पता बार में ब्राउज़र दिखाने के लिए बदल जाएगा और बाद के सभी यूआरएल और सामग्री वेब-सर्वर के डोमेन और jellyfish
अव्यवस्था के बिना सेवा की जाएगी ।
मैं निम्नलिखित विन्यास (स्निपेट) का उपयोग करके अपाचे को एक साधारण रिवर्स प्रॉक्सी के रूप में संचालित कर सकता हूं: -
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
- नायब ब्राउज़र के एड्रेस बार में डबल नहीं है /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
कि पहले उदाहरण में URL कहां से आया है।
क्या कोई मुझे सही दिशा की और संकेत करने में सक्षम है?
धन्यवाद, जे।
ProxyPassMatch
एक समकक्ष उपयोग के साथ बदल दिया हैmod_rewrite
, जोjellyfish
यूआरएल से हटाने की चुनौती को संबोधित करता है । मैं अब 404 की संख्या में देख रहा हूं जो तब करफ द्वारा आवश्यक विकेट घटकों जैसे अंतर्निहित तत्वों के संबंध में पॉप अप करता है। यहाँ एक कोड स्निपेट है:# 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/