11

हमारे पास हमारे nginx फ्रंट सिरों के पीछे बैठे कुछ बैकएंड हैं।बैकएंड 301/302 रीडायरेक्ट (proxy_pass) को अवरुद्ध करना और किसी अन्य स्थान पर पुनर्लेखन संभव है?

क्या इन बैकएंड द्वारा भेजे गए 301/302 रीडायरेक्ट को रोकना संभव है और क्या nginx उन्हें संभालता है?

हम अकेले कुछ thinging गया की तर्ज:

error_page 302 = @target; 

लेकिन मुझे शक है 301/302 रीडायरेक्ट एक ही रूप में संभाला जा सकता है 404 का आदि आदि ... मेरा मतलब है, error_page शायद 200 के लिए लागू नहीं करता है, आदि त्रुटि कोड?

तो संक्षेप में प्रस्तुत करने के लिए:

हमारे बैकेंड एक समय में एक बार वापस भेज 301/302s। हम nginx इन्हें अवरुद्ध करना चाहते हैं, और उन्हें किसी अन्य स्थान ब्लॉक पर फिर से लिखना चाहते हैं, जहां हम उनके साथ अन्य कई चीजें कर सकते हैं।

संभव है?

धन्यवाद!

उत्तर

10

आप proxy_redirect निर्देश इस्तेमाल कर सकते हैं:

http://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_redirect

Nginx अभी भी ग्राहक के लिए 301/302 वापस आ जाएगी लेकिन proxy_redirectLocation हैडर को संशोधित करेगा और ग्राहक Location में दिए गए यूआरएल के लिए एक नया अनुरोध कर देना चाहिए हैडर।

कुछ इस तरह nginx वापस करने के लिए बाद में अनुरोध करना चाहिए:

proxy_redirect http://upstream:port/ http://$http_host/;

2

मैं एक अधिक सामान्य मामला है जब एक रीडायरेक्ट स्थान किसी भी बाहरी URL हो सकता है हल करने में सफल रहा।

server { 
    ... 

    location/{ 
     proxy_pass http://backend; 
     # You may need to uncomment the following line if your redirects are relative, e.g. /foo/bar 
     #proxy_redirect//; 
     proxy_intercept_errors on; 
     error_page 301 302 307 = @handle_redirects; 
    } 

    location @handle_redirects { 
     set $saved_redirect_location '$upstream_http_location'; 
     proxy_pass $saved_redirect_location; 
    } 
} 

वैकल्पिक दृष्टिकोण है, जो कि तुम क्या वर्णन करने के लिए करीब है, इस सवाल का ServerFault जवाब में कवर किया जाता है: https://serverfault.com/questions/641070/nginx-302-redirect-resolve-internally

0

आप, कई बार रीडायरेक्ट का पालन Vlad के समाधान को संशोधित करने के रूप में इस की जरूरत है:

1)

recursive_error_pages on; 

से location / जोड़ें।

2) location @handle_redirects अनुभाग में जोड़े

proxy_intercept_errors on; 
    error_page 301 302 307 = @handle_redirect; 

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