nginx पासिंग कस्टम हेडर


13

मेरे पास निम्न उदाहरण है

           location / {
                    proxy_read_timeout 2000;
                    proxy_next_upstream error;
                    proxy_set_header X-Real-IP $remote_addr;
                    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
                    proxy_set_header Host $http_host;
                    proxy_pass_header X_CUSTOM_HEADER;
                    proxy_redirect off;
                    proxy_max_temp_file_size 0;
                    proxy_pass https://prod;
                    break;
            }

अब जब मैं निम्नलिखित कर्ल लाइन का उपयोग करता हूं

curl --head -H "X_CUSTOM_HEADER: foo" http://domain.com/api/test

अब यह काम नहीं करता है .. बैकएंड पर अपाचे / php हेडर नहीं देखता है। अगर मैं nginx को बायपास करता हूं तो यह काम करता है

curl --head -H "X_CUSTOM_HEADER: foo" http://web1.domain.com/api/test

जवाबों:


15

आपको underscores_in_headers onनिर्देश का उपयोग करना चाहिए जो डिफ़ॉल्ट रूप से बंद है।


यह जानकारी मुझे घंटों बचाता है।
मॉर्गन चेंग

मैं ख़ुशी से आपको एक ताज़ा पेय खरीदूंगा।
बूल्मव

आप सर, एक विद्वान और सज्जन व्यक्ति हैं।
ईव फ्रीमैन

2

आपको proxy_set_headerउन सभी हेडर का उपयोग करना चाहिए जिन्हें आप बैकएंड सर्वर पर फॉरवर्ड करना चाहते हैं। इसलिए proxy_pass_header ...लाइन के बजाय :

proxy_set_header X_CUSTOM_HEADER $http_x_custom_header;

मैंने कोशिश की है कि यह हेडर को सही ढंग से सेट नहीं करता है, अगर मैं $ http_x_custom_header को "foo" से बदल देता हूं तो यह काम करता है
माइक 21

मुझे यकीन नहीं है कि यह @Mike के लिए क्यों काम नहीं किया, लेकिन इसने मेरे लिए काम किया। मैं $ http_x_forwarded_proto के साथ एक्स-फ़ॉर्वर्ड-प्रोटो का उपयोग कर रहा हूं।
टायलर कोलियर

2

ऊपर मेरे लिए काम नहीं किया तो मैं भी इस्तेमाल किया proxy_pass_headerयहाँ प्रॉक्सी_पास_हाइडर के बारे में नग्नेक्स विकी देखें ।

यदि आपका कस्टम हेडर आपके प्रॉक्सी ब्लॉक में device_idजोड़ा proxy_pass_header device_id;जाता है।

यदि आप इसमें एक अंडरस्कोर के साथ कस्टमहेडर्स का उपयोग कर रहे हैं (जैसे कि मैं हूं) सुनिश्चित करें कि underscores_in_headers onआपके नगीनक्स कॉन्फ़िगरेशन में आपके पास है।


आपका बहुत बहुत धन्यवाद ! मैं अपने बालों को बाहर निकाल रहा था .... आपकी पोस्ट ने मुझे राहत दी ....
फहद अहमद २४'१15

1

डिफ़ॉल्ट रूप से nginx सभी आगे ( प्रॉक्सी_पास_रेक्वेस्ट_हेडर्स; ) हैडर बैकएंड सर्वर पर। लेकिन अगर आपके अनुरोध शीर्षलेख (कस्टम हेडर हो सकते हैं) में हेडर नाम में अंडरस्कोर (_) शामिल है तो उन हेडर को nginx ब्लॉक करता है।

Ex: authenticate_type, cdn_enable.

Nginx को सक्षम करने के लिए सभी या कस्टम अनुरोध किए गए हेडर को बैकएंड को चालू करने के लिए अंडरस्कोर विकल्प चालू करें।

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