2012-08-07 4 views
12

लोग, हम सेटअप करने के लिए कोशिश कर रहे हैं अपाचे इस परिदृश्य के लिए प्रॉक्सी रिवर्स साथ:ProxyPassMatch ProxyPassReverse

  • आने वाले अनुरोध प्रपत्र http://foo.com/APP/v1/main.html
  • यूआरएल एक फर्क संस्करण का संदर्भ, कहेंगे कुछ सर्वर के लिए ले, http://foo.com/APP/v2/main.html
  • एक अपस्ट्रीम लोड बैलेंसर (हैप्रोक्सी) सही सर्वर पर अनुरोध भेज देगा जिसमें एक जेबॉस सर्वर का फ्रंटिंग अपाचे 2 रिवर्स प्रॉक्सी होगा।
  • अनुरोध अपाचे 2 में दिखाई देता है जब यह अनुरोध पथ /APP/v1/main.html
  • की तरह हम यह करने के लिए (विपरीत) प्रॉक्सी चाहते http://localhost:8080/AppContext/main.html के लिए बाहर, URL में संस्करण टुकड़ा (v1, v2, आदि) पर ध्यान दिए बिना होगा।

मैं बहुत तरह यह करने के लिए कोशिश कर रहे हैं:

ProxyPassMatch ^/.*?/APP.*?/(.*)$ http://localhost:8080/AppContext/$1 
ProxyPassReverse /APP http://localhost:8080/AppContext 

मेरे प्रश्न हैं:

  1. ProxyPassMatch के अपने प्रयोग सही है?
  2. मेरा ProxyPassReverse "स्थैतिक" है। /APP के बाद संभावित रूप से परिवर्तनीय सामग्री के बारे में मुझे कैसे पता चलेगा?

किसी भी अंतर्दृष्टि के लिए धन्यवाद।

-Raj

उत्तर

8

तुम पास, regex एक छोटे से बदल रहा है संस्करण टुकड़ा के लिए खाते में करने की कोशिश: स्थान का पुनर्लेखन ऑन-द-मक्खी सुनिश्चित करने के लिए

ProxyPassMatch ^/.*?/APP.*?/v[0-9]+/(.*)$ http://localhost:8080/AppContext/$1 

ProxyPassReverse ज्यादातर है प्रक्षेपित ऐप द्वारा दिए गए प्रतिक्रियाओं में हेडर फ़ील्ड। तो जब यह 301 रीडायरेक्ट करता है, तो कहें, http://localhost:8080/AppContext/something, अपाचे इसे /APP/v1/something में बदलने के बारे में जानता है, इसलिए प्रॉक्सी के पीछे की जानकारी का खुलासा नहीं किया जाएगा। चूंकि आपके पास रिवर्स प्रॉक्सी में एक गतिशील यूआरएल है, तो आपके पास यहां कुछ विकल्प हैं। आप इसे हेप्रोक्सी लोड बैलेंसर में भेज सकते हैं (सुनिश्चित नहीं है कि यह आपके लिए कहां है), या आप केवल एक चुन सकते हैं और सर्वश्रेष्ठ के लिए आशा कर सकते हैं। उदाहरण के लिए, यदि आप /APP/balancer/ पर एक लोड संतुलन है तो /APP/v1/, /APP/v2/, /APP/v3/, आदि के लिए अनुरोध भेजता है जो तो फिर तुम यह कर सकते हैं: अन्यथा

ProxyPassReverse /APP/balancer http://localhost:8080/AppContext 

, तो आप सिर्फ एक और के लिए आशा के लिए यह इंगित कर सकते हैं सर्वोत्तम:

ProxyPassReverse /APP/v1 http://localhost:8080/AppContext 
+0

तत्काल प्रतिक्रिया के लिए धन्यवाद जॉन। हम क्लोजर में स्वतंत्र रूप से तैनात किए जा सकने वाले होमोजेनस टेम्पलेट के लिए हमारी अपाचे कॉन्फ़िगरेशन को संस्करण विशिष्ट प्रविष्टियों से मुक्त रखने की कोशिश कर रहे हैं। ऐसा लगता है कि ProxyPassReverse चीज़ को विश्वसनीय रूप से नहीं किया जा सकता है। क्या आप किसी प्रकार के पुनर्लेखन मॉड्यूल के माध्यम से इसे पूरा करने का सुझाव देंगे? – Raj

+0

@राज रेवाइट मदद करने वाला नहीं है, क्योंकि यह दूसरी दिशा में है। ऐप सर्वर अनुरोध को पुनर्निर्देशित करने का प्रयास करता है, यह वास्तविक URL के बारे में कुछ भी नहीं जानता है जिसका उपयोग इसे एक्सेस करने के लिए किया जा रहा है, इसलिए यह कहता है: "http: // localhost: 8080/AppContext/something" पर जाएं, जो ब्राउज़र 404 लौटाएगा क्योंकि कंप्यूटर पर जिस कंप्यूटर पर है, उसके पास स्थानीयहोस्ट पोर्ट 8080 पर चलने वाला कोई एप्लिकेशन सर्वर नहीं है –

संबंधित मुद्दे