Nginx रिवर्स प्रॉक्सी पुनर्निर्देशन


14

मैं nginxएक रिवर्स प्रॉक्सी के रूप में उपयोग कर रहा हूं और जब मैं अपने वेब इंटरफेस में लॉगिन करता हूं तो मैं अनुमानित URL पर रीडायरेक्ट होता हूं। मैं इससे बचना चाहूंगा और URL के रूप में हमेशा "server_name" रखूंगा। क्या यह संभव है?

यह मेरा है /etc/nginx/conf.d/my_app.conf:

server { 
    listen 443 ssl; 
    server_name my-app.net; 
    ssl_certificate /etc/pki/tls/certs/my-app.cer; 
    ssl_certificate_key /etc/pki/tls/private/my-app.key; 
    ssl_protocols TLSv1.1 TLSv1.2; 
    access_log /var/log/nginx/my-app.access.log main; 

    location / { 
        proxy_pass http://ip_of_the_app:7180/; 
        proxy_redirect off; 
    } 
} 

मैं कनेक्ट करता हूं http://my-app.net, लॉगिन जानकारी दर्ज करता हूं, फिर मैं http://ip_of_the_app:7180उसी लॉगिन पृष्ठ पर पुनः निर्देशित किया जाता हूं, और मुझे फिर से लॉगिन करना होगा। क्या इस दोहरे लॉगिन से बचा जा सकता है?


tonio94, क्या आपकी समस्या का समाधान किया गया है? यदि हाँ, तो कृपया उत्तर स्वीकार करें। यदि नहीं, तो कृपया स्पष्ट करें कि क्या गायब है।
cnst

2
मैंने कल ही इसका परीक्षण किया था, यह काम करता है, प्रॉक्सी_डायरेक्ट को हटाने की जरूरत है। सहायता के लिए धन्यवाद।
टोनियो94

जवाबों:


27

निर्धारित न करें proxy_redirectकरने के लिए off, कि नहीं कर रहा है आप क्या सोचते हैं यह कर रही है। proxy_redirectउदाहरण के लिए, URL पुनर्लेखन के समान कुछ करता है:

location /sales/ { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_redirect http://ip_of_the_app:7180/ http://$host/sales/; 
}

यह आपको /sales/कहीं और पथ होस्ट करने की अनुमति देता है। लेकिन फिर भी, डिफ़ॉल्ट पैरामीटर आपके लिए proxy_redirectबिल्कुल मुफ्त है। डिफ़ॉल्ट उस स्थान को पुनर्निर्देशित करने के लिए है जो कुछ भी मौजूद है proxy_pass(और डिफ़ॉल्ट पैरामीटर का उपयोग तब किया जाता है जब आप बिल्कुल सेट नहीं करते हैं proxy_redirect, या उपयोग करते हैं proxy_redirect default;)।

आपको सेट करने की आवश्यकता नहीं है proxy_redirect


आप जो याद कर रहे हैं वह हेडर है जिसे ऐप में भेजने की आवश्यकता है। उनमें से सबसे महत्वपूर्ण है HOST। यह वांछित के रूप में समीपवर्ती प्रदर्शन करेगा और ब्राउज़र में सही URL रखेगा।

location / { 
    proxy_pass http://ip_of_the_app:7180/; 
    proxy_set_header HOST $host;
}

ध्यान दें कि http://ip_of_the_app:7180/अब एप्लिकेशन को Host: my-app.netहेडर के साथ अनुरोध प्राप्त होगा ।


आपको कुछ और हेडर का उपयोग करने पर भी विचार करना चाहिए:

proxy_set_header Referer $http_referer;
proxy_set_header X-Forwarded-For $remote_addr;
proxy_set_header X-Forwarded-Proto $scheme;

यह एप्लिकेशन के अंदर बेहतर लॉगिंग के लिए अनुमति देगा http://ip_of_the_app:7180/X-Forwarded-Forवास्तविक ग्राहक का आईपी दे (जैसा कि nginxआईपी ​​के विपरीत ) और X-Forwarded-Protoयह जांचने के लिए कि क्लाइंट nginxHTTP या HTTPS से जुड़ा है या नहीं।


आपकी सहायता के लिए धन्यवाद। xy_redirect की आवश्यकता नहीं है, लेकिन प्रॉक्सी_सेट_हीडर रेफ़र ip_of_the_app: 7180 को ठीक से काम करने के लिए सेट किया जाना चाहिए।
टनियो94

@ tonio94 - धन्यवाद, मैंने जवाब अपडेट किया। ध्यान दें कि इसका सामान्य उपयोग Refererकेवल वह है $http_refererजो इसे अनुरोध से कॉपी करता है। यदि अनुरोध में रेफर हेडर नहीं है, तो यह काम नहीं करता है, इसलिए हार्डकोड करना कुछ मामलों में एक समाधान है।
grochmal

@JonathanKomar - इसके लिए धन्यवाद, आप सही हैं, अब संपादित किए गए हैं। क्षमा करें, आपकी टिप्पणी पर मुझे कुछ समय लगा।
grochmal

@grochmal धन्यवाद, आपने मूल रूप से इस जानकारी के साथ मेरे जीवन को बचाया: प्रॉक्सी_सेट_हीडर HOST $ होस्ट;
ओबे अब्द-अल्गदर 23
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.