सवाल रिवर्स प्रॉक्सी के साथ सापेक्ष यूआरएल को सही तरीके से कैसे संभालें


अपाचे में निम्नानुसार एक रिवर्स प्रॉक्सी सेटअप है:

पता www.example.com/folder के साथ सर्वर ए रिवर्स प्रॉक्सी सर्वर है।

यह पता चलता है: सर्वर बी पता test.madeupurl.com के साथ

इस तरह के काम करता है। लेकिन मेरी समस्या यह है कि, www.example.com/folder पर, सभी रिश्तेदार लिंक www.example.com/folder/css/examplefilename के बजाय www.example.com/css/examplefilename.css रूपों के हैं। सीएसएस

मैं यह कैसे तय करुं?

अब तक मेरा रिवर्स प्रॉक्सी सर्वर ए (www.example.com) पर है:

<Location /folder>
    ProxyPass  http://test.madeupurl.com
    ProxyPassReverse http://test.madeupurl.com
</Location>

43
2017-12-17 12:05


मूल


अगर आपको याद है तो नीचे दिए गए कौन से समाधान आपके लिए HBruijn के उत्तर में काम करते हैं? - Kimberly W


जवाब:


Apache ProxyPassRewrite से प्राप्त प्रतिक्रिया निकायों को फिर से लिखना नहीं है http://test.example.com, केवल शीर्षलेख (जैसे 404 पेज पर रीडायरेक्ट और ऐसे)।

कई विकल्प:

एक) पूर्ण ऐप के बजाय सापेक्ष पथ का उपयोग करने के लिए आंतरिक ऐप को फिर से लिखें। अर्थात। ../css/style.css के बजाय /css/style.css 

दो) एक ही उपनिर्देशिका में आंतरिक ऐप को दोबारा तैनात करें /folder test.example.com की जड़ की बजाय।

तीन) एक और दो अक्सर होने की संभावना नहीं है ... यदि आप भाग्यशाली हैं तो आंतरिक ऐप केवल दो या तीन उपनिर्देशिकाओं का उपयोग करता है और वे आपकी मुख्य साइट पर अप्रयुक्त हैं, बस प्रॉक्सीपास लाइनों का एक गुच्छा लिखें:

# Expose Internal App to the internet.
ProxyPass /externalpath/  http://test.example.com/
ProxyPassReverse /externalpath/  http://test.example.com/
# Internal app uses a bunch of absolute paths. 
ProxyPass /css/  http://test.example.com/css/
ProxyPassReverse /css/  http://test.example.com/css/
ProxyPass /icons/  http://test.example.com/icons/
ProxyPassReverse /icons/  http://test.example.com/icons/

चार) आंतरिक ऐप के लिए एक अलग सबडोमेन बनाएं और प्रॉक्सी सब कुछ रिवर्स करें:

<VirtualHost *:80>
   ServerName app.example.com/
   # Expose Internal App to the internet.
   ProxyPass /  http://test.internal.example.com/
   ProxyPassReverse /  http://test.internal.example.com/
</VirtualHost>

पंज) कभी-कभी डेवलपर्स पूरी तरह से अनजान हैं और उनके अनुप्रयोग न केवल पूर्ण यूआरएल उत्पन्न करते हैं बल्कि मेजबाननाम भाग को उनके यूआरएल में भी शामिल करते हैं और परिणामी एचटीएमएल कोड इस तरह दिखता है: <img src=http://test.example.com/icons/logo.png>

) आप एक विभाजित क्षितिज DNS और परिदृश्य के कॉम्बो समाधान का उपयोग कर सकते हैं 4. आंतरिक और बाहरी दोनों उपयोगकर्ता test.example.com का उपयोग करते हैं, लेकिन आपका आंतरिक DNS सीधे test.example.com के सर्वर के आईपी पते पर इंगित करता है। बाहरी उपयोगकर्ताओं के लिए test.example.com के लिए सार्वजनिक रिकॉर्ड आपके सार्वजनिक वेबसर्वर www.example.com के आईपी पते पर इंगित करता है और फिर आप समाधान 4 का उपयोग कर सकते हैं।

बी) आप वास्तव में test.example.com पर प्रॉक्सी अनुरोधों के लिए अपाचे प्राप्त कर सकते हैं, लेकिन यह भी प्रतिक्रिया शरीर को फिर से लिखें इससे पहले कि यह आपके उपयोगकर्ताओं को प्रेषित किया जाएगा। (आमतौर पर एक प्रॉक्सी केवल HTTP शीर्षलेख / प्रतिक्रियाओं को फिर से लिखता है)। apache 2.2 में mod_substitute। मैंने परीक्षण नहीं किया है अगर यह mod_proxy के साथ अच्छी तरह से ढेर है, लेकिन शायद निम्न कार्य करता है:

<Location /folder/>
  ProxyPass http://test.example.com/
  ProxyPassReverse http://test.example.com/ 
  AddOutputFilterByType SUBSTITUTE text/html
  Substitute "s|test.example.com/|www.example.com/folder/|i" 
</Location>

68
2017-12-17 12:36



पवित्र गाय अच्छा जवाब। इनमें से किसी भी कोशिश की भी नहीं है अभी तक लिखने के लिए धन्यवाद कहना चाहता था! एक लाख मदद करता है। इन विचारों में से कुछ का परीक्षण करने के लिए अभी जा रहे हैं और जल्द ही रिपोर्ट करेंगे :) - Hard worker
त्वरित प्रश्न कृपया, प्वाइंट 2 के लिए यदि मैं आपको सही ढंग से समझता हूं तो आप सुझाव दे रहे हैं कि मैं test.madeupurl.com/folder पर adpp को फिर से तैनात करता हूं? क्या मुझे अपनी अपाचे कॉन्फ़िगरेशन फ़ाइल में किसी भी बदलाव की आवश्यकता होगी? यह सबसे तेज़ समाधान की तरह दिखता है - Hard worker
इसके अतिरिक्त, आपको परेशान करने के लिए खेद है, लेकिन बिंदु 1 के साथ जब मैं कोशिश करता हूं कि आप जो समस्या का सुझाव देते हैं, मैं अभी भी अपने प्रश्न में वर्णन करता हूं। उदाहरण के लिए मैंने यहां उपयोग किया: <link rel = "स्टाइलशीट" प्रकार = "टेक्स्ट / सीएसएस" href = "../ css / custom.css" /> और ब्राउज़र में लिंक पते के लिए यह outputting है test.madeupurl.com/css/bootstrap.css बजाय test.madeupurl.com/folder/css/bootstrap.css। क्या आपके पास इस पर कोई सुझाव होगा कि यह सबसे उपयोगी होगा - Hard worker
अक्सर जब आप किसी एप्लिकेशन को पुन: नियोजित करते हैं जो अब दस्तावेज़ निर्देशिका में एक उपनिर्देशिका / स्टाइलशीट फ़ोल्डर को फ़ोल्डर में स्थापित किया गया है, आइकन इत्यादि / फ़ोल्डर / सीएसएस और / फ़ोल्डर / आइकन इत्यादि में तैनात किए जाएंगे। फिर HTML आउटपुट में लिंक बन जाएंगे <img src=/folder/icons/button.png> जो बदले में पकड़ा जाएगा ProxyPass /folder/ http://test.madeupurl.com/folder/ निर्देश। - HBruijn
Test.madeupurl.com/content/index.html पृष्ठ test.madeupurl.com/css/custom.css को शामिल करना चाहता है। उस स्थान पर आपको सापेक्ष यूआरएल का उपयोग करना चाहिए href="../css/custom.css" और नहीं href="/css/custom.css"। जब इंटरनेट उपयोगकर्ता पृष्ठ को पुनर्प्राप्त करता है तो URL www.example.com/folder/content/index.html होगा। सीएसएस के लिए यूआरएल तब होगा: www.example.com/folder/content/../css/custom.css जो वास्तव में है www.example.com/folder/css/custom.css जिसे अग्रेषित किया जाएगा test.madeupurl.com/css/custom.css। - HBruijn


एक पूरक के रूप में HBruijnअगर आप समाधान का विकल्प चुनते हैं तो इसका जवाब (3) "प्रॉक्सीपास", आपको भी इसका उपयोग करना पड़ सकता है mod_proxy_html अपने एचटीएमएल पृष्ठों में कुछ यूआरएल को फिर से लिखना।

सीएफ रिवर्स प्रॉक्सी के साथ सापेक्ष यूआरएल को सही तरीके से कैसे संभालें कुछ उदाहरणों के लिए।

एक लागू उदाहरण के रूप में, यहां आप अपाचे को कॉन्फ़िगर कर सकते हैं ProxyHTMLURLMap सब कुछ आगे बढ़ाने के लिए नियम your-domain-name.com/pad आपके Etherpad उदाहरण पोर्ट 9 001 पर स्थानीय रूप से चल रहा है:

<Location /pad> ProxyPass http://localhost:9001 retry=0 # retry=0 => avoid 503's when restarting etherpad-lite ProxyPassReverse http://localhost:9001 SetOutputFilter proxy-html ProxyHTMLURLMap http://localhost:9001 </Location> RewriteRule ^/pad$ /pad/ [R]


7
2017-10-10 00:27



ध्यान रखें कि mod_proxy_html केवल अपाचे 2.4 और ऊपर से शामिल है, जहां उपरोक्त मूल प्रश्न अपाचे 2.2 के लिए है - HBruijn
आपका जवाब निर्दोष है। हालांकि, मैं एक ऐसे मामले से मिला जहां सामग्री एचटीएमएल नहीं है, बल्कि यह पीडीएफ है। ProxyHTMLURLMap का उपयोग करना मेरे लिए काम नहीं करता था। कोई अन्य सुझाव? - Mohamed Ennahdi El Idrissi
यदि आपकी सामग्री एक पीडीएफ है, तो आपको इसमें यूआरएल को फिर से लिखने की जरूरत नहीं है! जब तक आप अपने उपयोगकर्ताओं को अपनी वेबसाइट के अन्य पृष्ठों तक पहुंचने के लिए पीडीएफ में लिंक पर क्लिक नहीं करना चाहते हैं, लेकिन यह मुश्किल लगता है। यूआरएल पुनर्लेखन को अक्षम करने के लिए, बस अंतिम 2 निर्देशों को छोड़ दें: SetOutputFilter और ProxyHTMLURLMap। - Lucas Cimon


आप रिवर्स प्रॉक्सी बनाने के लिए निम्न तरीके का उपयोग कर सकते हैं:
1. mod_proxy_html स्थापित करें

    yum install mod_proxy_html
  1. Mod_proxy_html मॉड्यूल लोड करें

    LoadModule proxy_html_module modules/mod_proxy_html.so
    
  2. और निम्नलिखित सेटिंग का उपयोग करें

    ProxyRequests off  
    ProxyPass /folder/  http://test.madeupurl.com  
    ProxyHTMLURLMap http://test.madeupurl.com  /folder  
    
    <Location /folder/>  
        ProxyPassReverse /  
        ProxyHTMLEnable On  
        ProxyHTMLURLMap  /  /folder/  
        RequestHeader    unset  Accept-Encoding  
    </Location>  
    

उममीद है कि इससे मदद मिलेगी।


2
2018-05-08 08:52