Nginx: मैं किसी अन्य पोर्ट के लिए http अनुरोध को कैसे अग्रेषित कर सकता हूं?


65

मुझे क्या करना है,

जब कोई http://localhost/route/abcसर्वर रिस्पांस पर जाता है तो बिल्कुल वैसा हीhttp://localhost:9000/abc

अब मैं अपना Nginx इस तरह कॉन्फ़िगर करता हूं:

location /route {
    proxy_pass  http://127.0.0.1:9000;
}

Http अनुरोध पोर्ट को 9000सही तरीके से भेजा जाता है, लेकिन इसे प्राप्त पथ http://localhost:9000/route/abcनहीं है http://localhost:9000/abc

कोई उपाय ?

जवाबों:


65

मुझे यहां सूक्ष्मता से नफरत है, लेकिन नीचे की तरह 9000 के अंत में / जोड़ने का प्रयास करें। यह अब अग्रेषित अनुरोध के लिए "मार्ग" नहीं करेगा।

location /route {
    proxy_pass  http://127.0.0.1:9000/;
}

4
यह स्वीकृत उत्तर होना चाहिए। बस /स्थान में सूचीबद्ध उपसर्ग को हटाने के तरीके के रूप में अच्छी तरह से प्रलेखित है।
बर्नार्ड

40

मेरा मानना ​​है कि आप URL के अतिरिक्त भाग को हटाने के लिए पुनर्लेखन का उपयोग कर सकते हैं। आपके मामले में मुझे लगता है कि आप इसका उपयोग कर सकते हैं:

location /route/ {
    rewrite ^/route/?(.*)$ /$1 break;    
    proxy_pass  http://127.0.0.1:9000;
    proxy_set_header Host $host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

हालाँकि, यदि आपके ऐप में आंतरिक लिंक हैं, तो वे अभी भी / abc / foo को इंगित कर सकते हैं, और यदि आप ऐसा करते हैं, तो इसके बजाय उन्हें / मार्ग / abc / foo को इंगित करने की आवश्यकता है, ताकि कच्चा अनुरोध सही तरीके से आए। आप nginx config को छोड़ना बेहतर हो सकता है क्योंकि यह है और अपने ऐप को कॉन्फ़िगर करने के लिए जागरूक होने के लिए यह एक उपनिर्देशिका पर रहता है, यदि आप कर सकते हैं।

मुझे पता है कि यह एक पुराना सवाल है, लेकिन यह मेरे लिए शीर्ष Google हिट था जब मैं उसी मुद्दे को हल करने की कोशिश कर रहा था!


धन्यवाद ! इस लिंक में हम चर की सूची की समीक्षा कर सकते हैं: wiki.nginx.org/HttpProxyModule#Variables
Edgard Leal

17

निम्नलिखित प्रयास करें

location /route/ {
        proxy_pass  http://127.0.0.1:9000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}

इस समाधान ने मेरे लिए सबसे अच्छा काम किया, क्योंकि यह मेजबान नाम को संरक्षित करता है।
शैफिक जमाल

साफ और सरल।
रावशन समंदारोव

7

vim nginx.conf

http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;

  server {
    listen 8080;

    location / {
      proxy_pass http://compute-1-36:8787;
      proxy_redirect http://compute-1-36:8787/ $scheme://$host:8080/;
    }
  }

यह कोड 8080 पर सुनता है और गणना-1-36 पर 8787 को पोर्ट करता है। आप स्थान में अन्य पथ का चयन कर सकते हैं /

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