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.