Apache पर्यावरण चर के साथ RequestHeader


13

मेरे पास अपाचे एक लोड बैलेंसर के रूप में स्थापित है। मैं अपाचे को एक्स-फ़ॉर्वर्ड-प्रोटो हेडर सेट करना चाहता था, लेकिन यह काम नहीं करता है:

RequestHeader set X-Forwarded-Proto "%{SERVER_PROTOCOL}e"

हेडर शून्य पर सेट हो जाता है। कोई विचार क्यों?

जवाबों:


15

देर से लेकिन फिर भी, मैं बस एक ही मुद्दे से निपटा हूं, और यह मेरे लिए काम कर रहा है:

RequestHeader set X_FORWARDED_PROTO 'https' env=HTTPS

प्रलेखन कहते हैं:

जब Add, Append, या सेट तर्क के साथ RequestHeader निर्देश का उपयोग किया जाता है, तो शर्तों को निर्दिष्ट करने के लिए एक चौथे तर्क का उपयोग किया जा सकता है। यदि पर्यावरण चर को env = में निर्दिष्ट किया गया है ... तर्क मौजूद है (या यदि पर्यावरण चर मौजूद नहीं है और env =! ... निर्दिष्ट किया गया है) तो RequestHeader निर्देश द्वारा निर्दिष्ट क्रिया प्रभावी होगी। अन्यथा, निर्देश का अनुरोध पर कोई प्रभाव नहीं पड़ेगा।

जबकि HTTPS पर्यावरण चर केवल तब सेट होता है जब अनुरोध SSL के माध्यम से किया जाता है।


3
En.wikipedia.org/wiki/List_of_HTTP_header_fields के अनुसार हेडर में अंडरस्कोर के बजाय हाइफ़न होना चाहिए: RequestHeader सेट एक्स-फ़ॉर्वर्ड-प्रोटो 'https' env / HTTPS यह वह हेडर है जो अमेज़न के ELB भेजता है।
लोएवबर्ग

9

आप ऐसा नहीं चाहते हैं; यह आपके हेडर को "HTTP / 1.1" (यहां तक ​​कि एक https अनुरोध पर) सेट करेगा - संभवतः आप जो भी पास कर रहे हैं उसके लिए बहुत उपयोगी नहीं है।

आपके पास http और https के लिए अलग-अलग VirtualHost ब्लॉक हैं; RequestHeaderप्रत्येक में बस हार्डकोड ।

<VirtualHost *:80>
    RequestHeader set X-Forwarded-Proto "http"
    ...
</VirtualHost>

<VirtualHost *:443>
    RequestHeader set X-Forwarded-Proto "https"
    ...
</VirtualHost>

1
यह अभी भी इस सवाल का जवाब नहीं देता है कि पर्यावरण चर क्यों काम नहीं कर रहे हैं। मैं बंदरगाह और कुछ अन्य मूल्यों को संरक्षित करना चाहता था, जिनमें से कुछ को इस तरह से हार्ड कोडित नहीं किया जा सकता है।
जॉन क्रेंशॉ

3

आप earlyकीवर्ड का उपयोग करके इसे ठीक कर सकते हैं :

RequestHeader set X-Forwarded-Proto "https" early

अन्यथा, आप वह कर सकते हैं जो जॉन क्रेंशॉ ने सुझाया था, जो निर्देशों के RewriteRuleबजाय उपयोग किया जाता है ProxyPass


1
मैं कैसे डिबग कर सकता हूं कि क्या वास्तव में अपाचे इस हेडर को भेज रहा है?
codec26

2

कारण मिल गया। यह ऑपरेशन के मुद्दे का एक आदेश है। mod_rewrite इन पर्यावरण चर की आपूर्ति के लिए ज़िम्मेदार है, लेकिन Apache इसे तब तक संसाधित नहीं करता जब तक कि यह किसी भी ProxyPass अनुरोध को संभाल नहीं लेता। तब तक, यह सिर्फ अशक्त सेट करेगा। एकमात्र समाधान mod_rewrite के माध्यम से प्रॉक्सी करना प्रतीत होता है।

Http://www.gossamer-threads.com/lists/apache/users/267160?do=post_view_threaded#267160 देखें

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