2014-07-08 12 views
5

में सापेक्ष पथ को अनदेखा करता है मेरा शीर्षक सबसे अच्छा नहीं है, वेबस्टफ का मेरा ज्ञान काफी बुनियादी है, क्षमा करें।nginx रिवर्स प्रॉक्सी के पीछे सर्वर यूआरएल

मैं क्या

हासिल करना चाहते हैं मैं एक बॉक्स fanbox Archlinux है कि मैं इंटरनेट से अपने घर लैन के लिए मुख्य प्रवेश बिंदु के रूप में उपयोग पर nginx चल (अर्थात् काम किया है, जहां मैं केवल पोर्ट 80 करने के लिए बाहर निकल सकते हैं और 443) एक बदलते डोमेन नाम का उपयोग कर रिवर्स प्रॉक्सी सुविधा के माध्यम से जिस पर मेरा कोई नियंत्रण नहीं है और हम अब home.net पर कॉल करेंगे।

fanbox अपने पोर्ट 80 और 443 home.net को मैप किया है, वह हिस्सा आसान था।

मैं फ़ायरवॉल के पीछे 2 वेबसर्वर, web1.lan, web2.lan, web2ilo.lan है।

http://web1.lan/phpAdmin/ 
http://web1.lan/gallery/ 
http://web2.lan/phpAdmin/ 
http://web2.lan/dlna/ 
: इन दोनों विभिन्न अनुप्रयोगों (जो विभिन्न मशीनों पर एक ही नाम हो सकता है) कि सीधे (नाम उदाहरण के रूप में दिया जाता है, मैं सामग्री पर कोई नियंत्रण नहीं) मानक URL के माध्यम से लैन पर पहुँचा जा सकता है है

... और इतने पर ...

अब web2ilo.lan एक विशेष मामला है। यह एचपी सर्वर web2.lan के बैंड प्रबंधन वेब इंटरफ़ेस से बाहर है।

http://web2ilo/login.html 

मेरा लक्ष्य इस तरह home.net की सब-पाथ के माध्यम से इन तक पहुँचने के लिए है:

http://home.net/web1/phpAdmin/ 
http://home.net/web1/gallery/ 
http://home.net/web2/phpAdmin/ 
http://home.net/web2/dlna/ 
http://home.net/web2ilo/login.html 

तो यह केवल उसकी जड़ यूआरएल द्वारा पहुँचा जा सकता है कि विशेष रूप से वेब सर्वर, केवल 1 आवेदन प्रदान करता है मेरी समस्या

लगभग काम करता है लेकिन वेब अनुप्रयोगों URL पुनः लिखने के लिए करते हैं यही कारण है कि इतना है कि बाद मैं करने के लिए क्रमश: प्रवेश:

http://home.net/web1/phpAdmin/login.php 
http://home.net/web2ilo/login.html 

ब्राउज़र को

http://home.net/phpAdmin/index.php 
http://home.net/index.html 

नोट क्रमश पुनः निर्देशित किया जाता है कि रिश्तेदार उपपथ web1 और web2ilo चले गए हैं, जो तार्किक रूप से मुझे एक 404.

मेरी config

तो देना अब तक, मैंने बहुत कुछ खोजा है और मैंने जो कुछ भी कर रहा था उसे समझने के बिना मैंने nginx में कई विकल्पों की कोशिश की। यहां मेरी कॉन्फ़िगरेशन है जो इस समस्या को पुन: उत्पन्न करती है। मैंने स्पष्टता के लिए एसएसएल छोड़ दिया है।

server { 
     listen  443 ssl; 
     server_name localhost; 

     # SSL stuff left out for clarity 

     location/{ 
      root /usr/share/nginx/html; 
      index index.html index.htm; 
     } 

     location /web1/ { 
       proxy_set_header Host $host; 
       proxy_redirect off; 
       proxy_pass https://web1.lan/; 
     } 


     location /web2/ { 
       proxy_set_header Host $host; 
       proxy_redirect off; 
       proxy_pass https://web2.lan/; 
     } 

     location /web2ilo/ { 
       proxy_set_header Host $host; 
       proxy_redirect off; 
       proxy_pass https://web2ilo.lan/; 
     } 

    } 

पहले जवाब

के बाद जवाब में से पहले दो (धन्यवाद!), मुझे लगता है कि मेरी सेटअप आम से दूर है और मैं मुसीबत के लिए अकेले शीर्षक हो सकता है उसके बाद।

फ्रंटेंड बंदरगाहों और डोमेन/होस्टनाम को छूए बिना फ़ायरवॉल के पीछे वेबसर्वर तक पहुंचने का बेहतर विचार क्या होगा?

+0

आप स्पष्ट रूप से अक्षम यूआरएल 'proxy_redirect off' साथ फिर से लिखने और यह काम करने की उम्मीद होगी। मजेदार। –

+2

मैंने उदाहरणों का पालन किया कि मुझे गुगलिंग मिली ... मैंने इस विकल्प के लिए कई पैरामीटर की कोशिश की है लेकिन शायद ही कोई अंतर दिखाई दे सकता है। तो मुझे लगता है कि मेरा पूरा दृष्टिकोण पूरी तरह से गलत है। मजाकिया नहीं। – FLBzh

उत्तर

1

आप proxy_redirect को सेट करने के उपयोग पर विचार करना चाहेंगे ताकि nginx को यह पता चल सके कि इसे उचित बैक-एंड यूआरएल में "बैकएंड" सर्वर प्रतिक्रिया शीर्षलेख (स्थान और ताज़ा करें) को संशोधित करना चाहिए। आप default सेटिंग का उपयोग कर सकते हैं या तो नीचे की तरह मैपिंग अपने location और proxy_pass निर्देशों से उचित मूल्यों की गणना, या स्पष्ट रूप से निर्दिष्ट करने के लिए अनुमति देने के लिए nginx:

proxy_redirect http://web1.lan/ /web1/ 

देखें: http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

नोट: यह केवल प्रतिक्रिया शीर्षकों को प्रभावित करता है - HTML सामग्री, या किसी भी जावास्क्रिप्ट में कोई लिंक नहीं।

यदि आपको सामग्री या जावास्क्रिप्ट में लिंक के साथ समस्याएं आती हैं, तो आप बैकएंड सर्वर पर सामग्री को संशोधित कर सकते हैं (जिसे आपने संकेत दिया हो सकता है), या अपने प्रॉक्सी समाधान को समायोजित करें जैसे फ्रंट एंड पथ समान हैं बैक एंड वाले के रूप में (उदाहरण के लिए, http://frontend/web1/phpAdmin के बजाय आपके पास बस http://frontend/phpAdmin है)। इस उदाहरण के लिए प्रत्येक आवेदन के लिए location निर्देशों जोड़ने, आवश्यक,

location /phpAdmin/ { 
    proxy_set_header Host $host; 
    proxy_redirect off; 
    proxy_pass https://web1.lan/phpAdmin/; 
}   
+0

प्वाइंट 1: मैंने दोनों की कोशिश की है लेकिन किसी भी अंतर को देखने के लिए पर्याप्त नहीं है। मैं दस्तावेज़ पढ़ूंगा और परीक्षण चलाऊंगा। – FLBzh

+0

प्वाइंट 2: अच्छा लगता है लेकिन यह एक विशेष मामले को कवर करने में विफल रहता है जिसका मैंने अपने प्रश्न में उल्लेख नहीं किया ... मुझे नहीं लगता था कि इसकी आवश्यकता होगी। मैं संपादित करूंगा। – FLBzh

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