मैं nginx के पीछे सर्वर से प्राप्त प्रतिक्रिया के लिए एक कस्टम हेडर जोड़ना चाहता हूं।
जबकि add_header
नेगनेक्स-संसाधित प्रतिक्रियाओं के लिए काम करता है, यह proxy_pass
उपयोग किए जाने पर कुछ भी नहीं करता है।
मैं nginx के पीछे सर्वर से प्राप्त प्रतिक्रिया के लिए एक कस्टम हेडर जोड़ना चाहता हूं।
जबकि add_header
नेगनेक्स-संसाधित प्रतिक्रियाओं के लिए काम करता है, यह proxy_pass
उपयोग किए जाने पर कुछ भी नहीं करता है।
जवाबों:
HttpHeadersMoreModule नामक एक मॉड्यूल है जो आपको हेडर पर अधिक नियंत्रण प्रदान करता है। यह नगनेक्स के साथ नहीं आता है और अतिरिक्त स्थापना की आवश्यकता होती है। इसके साथ, आप कुछ इस तरह से कर सकते हैं:
location ... {
more_set_headers "Server: my_server";
}
यह "सर्वर आउटपुट हेडर को किसी भी स्थिति कोड और किसी भी सामग्री प्रकार के लिए कस्टम मूल्य पर सेट करेगा"। यह हेडर की जगह लेगा जो पहले से ही सेट हैं या यदि कोई परेशान है तो उन्हें जोड़ें।
Secure
और बनाना संभव है ? लक्ष्य प्रतिक्रिया कुकी में केवल कुकी और विशेषताएँ ही होती हैं। HttpOnly
name
expire
add_header
साथ ही काम करता है proxy_pass
ही बिना । मैंने अभी एक कॉन्फ़िगरेशन स्थापित किया है, जहां मैंने उस निर्देश का उपयोग किया है। मुझे स्वीकार करना होगा कि मैंने संघर्ष किया है और साथ ही साथ इस कारण को याद किए बिना इसे स्थापित करना है, हालाँकि।
अभी मेरे पास एक कार्यशील विन्यास है और इसमें निम्नलिखित शामिल हैं (अन्य के बीच):
server {
server_name .myserver.com
location / {
proxy_pass http://mybackend;
add_header X-Upstream $upstream_addr;
}
}
इससे पहले कि 1.7.5
नगनेक्स add_header ने अपने जवाब में सेबास्टियन गुडमैन द्वारा उल्लिखित HttpHeadersMoreModule के विपरीत केवल सफल प्रतिक्रियाओं पर काम किया ।
Nginx के बाद से 1.7.5
आप always
त्रुटि प्रतिक्रियाओं में भी कस्टम हेडर शामिल करने के लिए कीवर्ड का उपयोग कर सकते हैं । उदाहरण के लिए:
add_header X-Upstream $upstream_addr always;
सीमा: आप server
हेडर मान का उपयोग करके ओवरराइड नहीं कर सकते add_header
।
add_header X-Upstream $upstream_addr always;
X-Upstream: 10.10.10.10
बनाम X-Upstream: 53c2d28edefdf501ab7c92e02a0c1687
(md5 शायद बुनियादी ढांचे को मास्क करने में मददगार नहीं है, लेकिन यह इस विचार को व्यक्त करता है)।
add_header
निर्देशन का उपयोग करने का एक उदाहरण है । आपको उन्हें बिल्कुल नहीं भेजना है।
जैसा कि ओलिवर लिखते हैं:
add_header
साथproxy_pass
ही बिना काम करता है ।
हालाँकि, जैसा कि शेन लिखते हैं, नगनेक्स 1.7.5 के रूप में, आपको त्रुटि प्रतिक्रियाओं के लिए काम always
करने के लिए पास होना चाहिए add_header
, जैसे:
add_header X-Upstream $upstream_addr always;
हेडर पास के साथ add_header
ठीक काम करता है के साथ एक हेडर जोड़ना , लेकिन अगर प्रतिक्रिया में मौजूदा हेडर मूल्य है तो यह मूल्यों को ढेर कर देगा।
यदि आप हेडर मान सेट या प्रतिस्थापित करना चाहते हैं (उदाहरण के Access-Control-Allow-Origin
लिए क्रॉस क्लाइंट संसाधन साझा करने की अनुमति देने के लिए अपने क्लाइंट से मिलान करने के लिए हेडर बदलें ) तो आप निम्न कार्य कर सकते हैं:
# 1. hide the Access-Control-Allow-Origin from the server response
proxy_hide_header Access-Control-Allow-Origin;
# 2. add a new custom header that allows all * origins instead
add_header Access-Control-Allow-Origin *;
तो आप proxy_hide_header
के साथ संयुक्त add_header
प्रतिक्रिया हेडर मान सेट / बदलने की शक्ति देता है।
इसी तरह का जवाब यहां सर्वरफॉल्ट पर मिल सकता है
नोट: proxy_set_header
अनुरोध हेडर भेजने से पहले अनुरोध हेडर सेट करने के लिए है, प्रतिक्रिया हेडर सेट करने के लिए नहीं (हेडर के लिए ये कॉन्फ़िगरेशन विशेषताएँ थोड़ा भ्रमित हो सकती हैं)।
आप इस समाधान की कोशिश कर सकते हैं:
अपने location
ब्लॉक में जब आप proxy_pass
ऐसा कुछ करते हैं:
location ... {
add_header yourHeaderName yourValue;
proxy_pass xxxx://xxx_my_proxy_addr_xxx;
# Now use this solution:
proxy_ignore_headers yourHeaderName // but set by proxy
# Or if above didn't work maybe this:
proxy_hide_header yourHeaderName // but set by proxy
}
मुझे यकीन नहीं है कि यह वही होगा जो आपको चाहिए, लेकिन इस पद्धति के कुछ हेरफेर की कोशिश करें और शायद परिणाम आपकी समस्या में फिट होगा।
इसके अलावा आप इस संयोजन का उपयोग कर सकते हैं:
proxy_hide_header headerSetByProxy;
set $sent_http_header_set_by_proxy yourValue;
location / { proxy_pass http://127.0.0.1:8080/; proxy_hide_header "Access-Control-Allow-Origin"; if ($http_origin ~* "^https://(example.com|www.example.com)$") { add_header Access-Control-Allow-Origin "$http_origin"; } }