2015-11-04 8 views
10

एक विशिष्ट पथ पर सापेक्ष रीडायरेक्ट के साथ एक निश्चित यूआरएल का जवाब देने के लिए nginx में रीडायरेक्ट को कैसे कॉन्फ़िगर किया जा सकता है?nginx से रिश्तेदार यूआरएल रीडायरेक्ट कैसे जारी करें?

nginx documentation सुझाव देता है कि यह nginx के लिए डिफ़ॉल्ट मोड है, लेकिन वास्तविकता में यदि स्थान को/nginx से शुरू करने के लिए पुनर्निर्देशित किया जा रहा है तो स्थान फ़ील्ड में एक पूर्ण यूआरएल का जवाब दे रहा है।

स्थानीय सर्वर विन्यास वाले स्थान के लिए:

location = /a { 
    return 301 some/path; 
} 
location = /b { 
    return 301 /qwerty; 
} 

के अनुरोध के जवाब स्थान के लिए/एक है:

Location: some/path 

और के लिए/b यह है:

Location: http://127.0.0.1/qwerty 

हालांकि, हम जवाब देना चाहते हैं:

Location: /qwerty 

हम रिश्तेदार रीडायरेक्ट का उपयोग करना चाहते हैं यह है कि हम विभिन्न डोमेन और प्रॉक्सी से nginx तक पहुंचना चाहते हैं, उदा। देव में या एसएसएल-टर्मिनिंग लोड-बैलेंसर के माध्यम से स्पष्ट रूप से, और उस संदर्भ को समझने के लिए nginx से मुक्त होने से चीजों को सरल रखना होगा।

FYI करें इन उदाहरणों nginx संस्करणों 1.4.6 और 1.9.6 के खिलाफ परीक्षण किया गया, का उपयोग कर कर्ल उदा .:

curl --head http://127.0.0.1/b 

उत्तर

4

nginx हैडर फिल्टर हमेशा सम्मिलित करता <scheme>://<host> अगर return uri / साथ शुरू होता है।

location = /b { 
    return 301 " /qwerty"; # insert space char before "/qwerty" 
} 

:


तो, ग्राहक (जैसे गूगल क्रोम) Location: /qwerty स्वीकार कर सकते हैं, तो आप निम्नलिखित कॉन्फ़िगर उपयोग कर सकते हैं (संदर्भ के लिए nginx स्रोत में देख ngx_http_script_return_code() और ngx_http_header_filter() समारोह)

एक और समाधान Location: /qwerty उत्पन्न कर सकता है, lua-nginx-module और add_header निर्देश के माध्यम से:

location = /b { 
    add_header Location "/qwerty"; 
    content_by_lua 'ngx.exit(301)'; 
} 

यह अजीब कॉन्फ़िगर कैसे काम करता है?

  • उपयोग ngx.exit 301 के साथ स्थिति कोड के साथ बाहर निकलने के लिए, यह पैदा नहीं करता "स्थान" हैडर
  • उपयोग add_header (return निर्देश हमेशा "स्थान" शीर्ष लेख, यहां तक ​​कि खाली हैडर मूल्य बनाने) Location: /qwerty हेडर को जोड़ने के लिए है, यह <scheme>://<host>
+0

"वापसी" निर्देश में किसी स्थान के साथ अच्छी चाल डालें नहीं। क्या nginx का यह व्यवहार कहीं भी दस्तावेज है? –

+0

वह अंतरिक्ष चाल उल्लसित और भयानक है, आपने इसे कैसे खोजा? –

+0

hi @TrevorFreeman, आरएफसी 2616 वास्तव में "अंतरिक्ष चाल" की अनुमति देता है। अध्याय "4.2 संदेश शीर्षलेख" में, हेडर मान को 'फ़ील्ड-वैल्यू = * (फ़ील्ड-कंटेंट | एलडब्ल्यूएस)' के रूप में परिभाषित किया गया है। '* एलडब्लूएस' का मतलब शून्य या कई 'रैखिक सफेद स्थान' है। – xiaochen

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