Nginx रिवर्स प्रॉक्सी से कस्टम हैडर को अग्रेषित करें


25

मेरे पास एक निगनेक्स वेब सर्वर है जो अतिरिक्त हैंडलिंग के लिए अपाचे पर आगे के अनुरोधों के लिए एक रिवर्स प्रॉक्सी के रूप में काम कर रहा है (मैं आपसे भीख नहीं मांग रहा हूं)। मेरा एक अनुरोध है, जिसके लिए मैं एक कस्टम हेडर संलग्न करने का प्रयास कर रहा हूं और मैं उस कस्टम हेडर को अपाचे के साथ भेजना चाहूंगा ताकि मैं इसके साथ एक ऐप में कुछ कर सकूं।

मैंने HttpProxyModuleडॉक्स के माध्यम से पोक किया है , लेकिन वे बहुत वर्णनात्मक नहीं हैं, भले ही मैं सही जगह पर हूं (यह बहुत अच्छी तरह से हो सकता है कि मैं नहीं हूं)।

X-CUSTOM-REFERRERहेडर को अग्रेषित करने के लिए मैं कैसे नगनेक्स प्राप्त कर सकता हूं इसके अलावा, यदि संभव हो तो, मैं चाहूंगा कि यह आने वाले किसी भी कस्टम हेडर के साथ अग्रेषित करें । यदि उत्तरार्द्ध बहुत अधिक पूछना है, तो पूर्व मेरी वर्तमान आवश्यकता के लिए पर्याप्त होगा।

जैसा कि आप देख सकते हैं, मैं nginx के लिए बहुत नया हूं, इसलिए उपचारात्मक संस्करण उपयोगी होगा।

धन्यवाद।

अद्यतन करें

मेरे मौजूदा विन्यास से प्रासंगिक स्निपेट:

location / {
    proxy_pass                  http://preview;
    proxy_redirect              off;
    proxy_set_header            Host $host;
    proxy_set_header            X-Real-IP $remote_addr;
    proxy_set_header            X-Forwarded-For $proxy_add_x_forwarded_for;
    # proxy_set_header            X-Custom-Referrer $x_custom_referrer;
}

जवाबों:


20

HttpProxyModule का proxy_set_headerनिर्देश आपको ऐसा करने की अनुमति देता है। उदाहरण के लिए:

proxy_pass http://apachehost;
proxy_set_header X-Custom-Referrer $proxy_add_<header_field_name_from_last_request>;

1
धन्यवाद, @mgorven आने वाला मूल्य हालांकि परिवर्तनशील है। क्या मैं आने वाले X-Custom-Referrerहेडर से एक मूल्य पढ़ सकता हूं और इसे पास कर सकता हूं ? proxy_set_header X-Custom-Referrer $x_custom_referrerया प्रभाव के लिए कुछ है?
रोब विल्करसन

1
हां, आप उपयोग कर सकते हैं $http_x_custom_referrer। हालांकि, क्लाइंट द्वारा भेजे गए सभी हेडर को बैकएंड पर स्वचालित रूप से पारित किया जाना चाहिए। क्या आपने proxy_pass_request_headers offकहीं सेट किया है?
12:56

ऐसा नहीं कि मैं देख सकता हूं। मैंने अपने कॉन्फ़िग फ़ाइल से स्निपेट के साथ अपना प्रश्न अपडेट किया है। हालांकि हेडर निश्चित रूप से इसे ऐप के लिए नहीं बना रहा है, हालांकि। उस ने कहा, मैं यह मानने की कोशिश कर रहा हूं कि स्रोत ऐप इसे भेज रहे हैं, इसलिए मैं अपना यथोचित परिश्रम करूंगा और सुनिश्चित करूंगा कि यह डिफ़ॉल्ट व्यवहार होना चाहिए।
रॉब विल्करसन

आपके स्निपेट में @RobWilkerson प्रासंगिक proxy_set_headerटिप्पणी की गई है; $x_custom_referrerइसके बजाय आप उपयोग कर रहे हैं $http_x_custom_referrer...
गंभीर

मुझे लगता है कि @ मॉर्गन के उत्तर को $http_<custom_header_field>$proxy_add_<custom_header_field>
गुयेन

2

मॉड्यूल ngx_headers_more आपको http हेडर बदलने और जोड़ने की अनुमति देता है।


यह मॉड्यूल प्रतिक्रिया में हेडर जोड़ता है। यही नहीं ओपी पूछ रहा है। उन्हें अपस्ट्रीम में, एक अतिरिक्त हेडर भेजने की आवश्यकता है proxy_pass
विक्टर श्रोडर

1

आप अपस्ट्रीम हेडर ($ http_ से शुरू होने वाले नाम) और अतिरिक्त कस्टम हेडर का उपयोग कर सकते हैं। उदाहरण के लिए:

add_header X-Upstream-01 $http_x_upstream_01;
add_header X-Hdr-01  txt01;

अगला, कंसोल पर जाएं और उपयोगकर्ता के हेडर के साथ अनुरोध करें:

curl -H "X-Upstream-01: HEADER1" -I http://localhost:11443/

प्रतिक्रिया में X-Hdr-01, सर्वर द्वारा निर्धारित और X- अपस्ट्रीम -01, क्लाइंट द्वारा निर्धारित है:

HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 30 Nov 2015 23:54:30 GMT
Content-Type: text/html;charset=UTF-8
Connection: keep-alive
X-Hdr-01: txt01
X-Upstream-01: HEADER1

1
यह प्रतिक्रिया पर हेडर सेट कर रहा है। ओपी एक proxy_passनिर्देश के अपस्ट्रीम में भेजे जाने के लिए हेडर सेट करना चाहता है ।
विक्टर श्रोडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.