का कॉन्वेन्स अपाचे तो मेरे पास एसएसएल ऑफ़लोडिंग और HTTP लोड बैलेंसर का उपयोग करने वाला अपेक्षाकृत सीधे आगे सर्वर स्टैक है। सेटअप इस तरह कुछ दिखता है:मूल क्लाइंट प्रोटोकॉल
(client) -> (SSL offload - stud) -> (balancer - haproxy) -> (http server - apache)
मेरा प्रश्न यह सब कुछ करने के बारे में नहीं है। यह बहुत अच्छा काम करता है, और मैं ईमानदारी से उड़ा हूं कि इसे स्थापित करने के लिए यह कितना सीधा है। मैं यह भी जोड़ूंगा कि HTTP क्लाइंट सीधे हैप्रोक्सी से जुड़ते हैं, जिससे एसएसएल ऑफ़लोड हो जाता है। और रिकॉर्ड के लिए, उपरोक्त प्रत्येक टुकड़े के लिए अनावश्यक भागीदार हैं।
समस्या कुछ हद तक सार है। मैं एक प्रदर्शन के साथ शुरू करूंगा। ग्राहक https://myserver.tld/scp
करने के लिए सेटअप के माध्यम से एक अनुरोध (कुछ बातें स्पष्ट रखने के लिए हटा दिया हेडर)
GET /scp HTTP/1.1
Host: myserver.tld
(headers added by haproxy)
X-Forwarded-For: [original::client:ip]
X-Forwarded-Proto: https
बनाता है और सर्वर
HTTP/1.1 301 Moved Permanently
Date: Wed, 03 Jul 2013 03:16:25 GMT
Server: Apache/2.2.15 (CentOS)
Location: http://myserver.tld/scp/
Content-Length: 344
Content-Type: text/html; charset=iso-8859-1
तो अपाचे mod_dir
के साथ एक ही यूआरएल के लिए एक रीडायरेक्ट भेज रहा है के साथ प्रतिक्रिया एक पिछला स्लैश। ऐसा करना उचित है। यह मुद्दा नहीं है। मुद्दा यह है कि HTTPS प्रोटोकॉल खो गया था। दोबारा, मुझे लगता है कि अपाचे एक HTTP यूआरएल पर रीडायरेक्ट करने के लिए सही है, आखिरकार, उपर्युक्त स्टैक से प्राप्त कनेक्शन एक नियमित HTTP कनेक्शन है।
तो अपाचे के परिप्रेक्ष्य से, ग्राहक ने नियमित HTTP कनेक्शन का अनुरोध किया। एचटीटीपीएस ध्वज अन्य सभी एसएसएल जानकारी के साथ बंद है, क्योंकि सत्र के एसएसएल भाग को स्टड द्वारा नियंत्रित किया जाता है।
हालांकि (अपाचे के अंदर) मैं एक वैध X-Forwarded-Proto
हैडर है, मैं अपाचे बताने के लिए एक तरीका है कि मूल ग्राहक कनेक्शन HTTPS था और निर्देशिका स्लेश mod_dir
से अनुप्रेषित कि https://
प्रोटोकॉल का उपयोग करना चाहिए नहीं मिल रहा। मैं क्या खो रहा हूँ?
केवल एक चीज मैं ले कर आए हैं HTTPS अग्रेषित कनेक्शन के लिए haproxy अंदर Location
हैडर https://
साथ http://
को बदलने के लिए पुनर्लेखन के लिए है, लेकिन मैं सच में नहीं लगता है कि दृष्टिकोण बहुत ही सुंदर है। मैं Apache (और (मुझे) को चोट नहीं पहुंचाएगा) पीएचपी आगे श्रृंखला को सूचित करता है) एक सामान्य HTTPS कनेक्शन जैसे कनेक्शन को सूचित और इलाज के लिए।
कृपया मदद करें!
पीएस - मैंने यह पूछने से पहले कहा है कि क्या आपको पूछना है, तो आप इसे गलत कर रहे हैं। शायद यह जड़ मुद्दा है, लेकिन ऐसा लगता है कि यह एक साधारण दुविधा है और मुझे लगता है कि यहां आने वाला एकमात्र ऐसा ही है।
# 2 मेरे लिए बहुत अच्छा काम करता है। धन्यवाद – jontro
मुझे अपने उपयोग के लिए ठीक से काम करने के लिए सुझाव 1 समायोजित करना पड़ा। पहले, मैं करने के लिए दूसरा RewriteCond बंद: 'RewriteCond% {ला-यू: REQUEST_FILENAME} -d' ठीक से काम कर मिलान (पर [अपाचे के डॉक्स] (http आधारित पाने के लिए: //httpd.apache। संगठन/डॉक्स/वर्तमान/mod/mod_rewrite.html), विशेष रूप से "यूआरएल-आधारित लुक-आगे" के बारे में नोट। मैंने मेजबाननाम को गतिशील रूप से शामिल करने के लिए खुद को फिर से लिखना समायोजित किया, और डुप्लिकेट '/' से बचें: 'रिवाइट्रूल^(। + [^ /]) $ Https: //% {HTTP_HOST} $ 1/[आर = 301, एल, क्यूएसए]' '$ 1' var स्वयं प्रारंभिक स्लैश प्रदान करता है, इसलिए इसकी आवश्यकता नहीं है पुनर्लेखन यूआरएल में –
रिवाइटऑप्शन स्वीकृति NooSlash को apache 2.4 के साथ जरूरी है। –