रिवर्स प्रॉक्सी - उपनिर्देशिका निकालें


27

निकट भविष्य में मेरे पास 3 nginx सर्वर होने वाले हैं। एक दो अन्य के लिए एसएसएल के लिए एक रिवर्स प्रॉक्सी है। इसलिए, उदाहरण के लिए, मैं जाता हूं:

https://www.mysitename.com/site1

इस उदाहरण में दो अन्य सर्वर साइट 1 और साइट 2 हैं। मैंने प्रॉक्सी पर एसएसएल प्रमाणपत्र स्थापित किया है और मैं एक रिवर्स प्रॉक्सी का उपयोग करना चाहता हूं (एसएसएल आवश्यक नहीं है क्योंकि सभी 3 एक आंतरिक नेटवर्क पर हैं)। परीक्षण के उद्देश्य से मैं एसएसएल / रिवर्स-प्रॉक्सी के लिए 443 पर nginx सुन रहा हूं, सुनो पोर्ट 8081 जो साइट 1 के लिए एक रेल ऐप है और साइट 2 के लिए 8082 है।

मेरे पास यह है...

server {
    listen                  443;
    server_name             mysitename.com;

    ssl                     on;
    ssl_certificate         ssl/mysitename.com.crt;
    ssl_certificate_key     ssl/mysitename.com.key;
    keepalive_timeout       60;

    location /site1 {
        proxy_pass http://localhost:8081;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// https://;
    }

    location /site2 {
        proxy_pass http://localhost:8082;
        proxy_set_header    Host            $host;
        proxy_set_header    X-Real-IP       $remote_addr;
        proxy_set_header    X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_redirect http:// https://;
    }
}

इसलिए जब मैं www.mysitename.com/site1 पर जाता हूं, तो मैं चाहता हूं कि यह मूल रूप से वापस आ जाए जो सामान्य तौर पर लोकलहोस्ट से आएगा: 8081 (या बाद में लाइन को किसी अन्य सर्वर के लिए आंतरिक आईपी)।

वहाँ एक तरीका है कि यह "साइट 1" स्थानीयहोस्ट कॉल से पट्टी है? ऐसा लगता है कि यह स्थानीयहोस्ट: 8081 / साइट 1 का उपयोग कर रहा है। साइट 1 और साइट 2 साइट प्रकृति के हैं "/ लॉगिन / इंडेक्स" या "/ जो भी / सूची", आदि, कोई "1%" नहीं।

साइट नियंत्रकों (रीडायरेक्ट_टो का उपयोग करके) में रीडायरेक्ट भी होते हैं जो / लॉगिन / इंडेक्स / / जो भी / सूची जैसी चीजों से जाते हैं।

क्या मुझे साइट 1 का उपयोग करने के लिए साइट के URL को फिर से डिज़ाइन करना होगा? या NGINX प्रॉक्सी इसे समझ सकता है?

धन्यवाद।


सॉकेट के लिए। यह कोशिश करें कि बस फिर से लिखें /(.*) /socket.io/ तोड़; serverfault.com/questions/444532/…
user956584

जवाबों:


53

उद्धरण http://nginx.org/r/proxy_pass :

यदि प्रॉक्सी_पास यूआरआई के साथ निर्दिष्ट किया जाता है, तो सर्वर से अनुरोध पारित करते समय, सामान्यीकृत अनुरोध का एक हिस्सा जो यूआरआई के स्थान से मेल खाता है उसे निर्देश में निर्दिष्ट यूआरआई द्वारा प्रतिस्थापित किया जाता है:

location /name/ {
    proxy_pass http://127.0.0.1/remote/;
}

यही है, आपको proxy_passइस तरह का उपयोग करना होगा:

location /site1/ {
    proxy_pass http://localhost:8081/;
    ...
}

निर्देश /में अनुगामी ध्यान दें proxy_pass- यह मूल यूआरआई के कुछ भाग को स्थान से मिलान करेगा, अर्थात /site1/


2
यह सब लिया समस्या को ठीक करने के लिए एक कठिन स्लैश था !? उसके लिए धन्यवाद। अब यह पता लगाने के लिए कि मैं redirect_to को कैसे संभालने जा रहा हूं - लेकिन यह एक सर्वर प्रश्न नहीं है इसलिए मैं इसे कहीं और समझूंगा।
Chromag

ध्यान दें, आपको प्रॉक्सी_पास URL पर भी ट्रेलिंग स्लैश की आवश्यकता है!
डैनियल हिल
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.