सवाल Nginx: मैं किसी अन्य पोर्ट को http अनुरोध कैसे भेजूं?


मैं क्या करना चाहता हूँ,

जब कोई यात्रा करता है 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

कोई उपाय ?


45
2017-09-05 10:12


मूल




जवाब:


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

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

41
2018-05-19 19:28



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


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

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 को इंगित कर सकते हैं, और यदि आप ऐसा करते हैं तो उन्हें बजाय / रूट / एबीसी / foo पर इंगित करने की आवश्यकता होती है ताकि कच्चा अनुरोध सही तरीके से आ सके। आप nginx कॉन्फ़िगरेशन को छोड़कर बेहतर हो सकते हैं और इसके बजाय अपने ऐप को यह पता लगाने के लिए कॉन्फ़िगर कर सकते हैं कि यह एक उपनिर्देशिका में रहता है, यदि आप कर सकते हैं।

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


33
2018-02-26 12:53



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


निम्नलिखित कोशिश करें

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;
}

11
2017-09-05 10:31



यह समाधान मेरे लिए सबसे अच्छा काम करता है, क्योंकि यह होस्ट नाम को संरक्षित करता है। - Shafique Jamal


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 पर सुनता है और गणना -178 पर पोर्ट 8787 पर रीडायरेक्ट करता है। आप स्थान में अन्य पथ का चयन कर सकते हैं /


5
2017-10-09 08:58