यह उत्तर मानता है कि आपने लोड बैलेंसर सुरक्षा समूह में पहले ही https सक्षम कर लिया है, लोड बैलेंसर में SSL प्रमाणपत्र जोड़ दिया है, दोनों पोर्ट 80 और 443 लोड लोडर द्वारा अग्रेषित किए जा रहे हैं, और 53 वें मार्ग पर इलास्टिक बीनस्टॉक वातावरण में अपने डोमेन नाम को इंगित किया है। (या समकक्ष DNS सेवा)।
नोट: यह उत्तर इलास्टिक बीनस्टॉक वातावरण के लिए है जो अपाचे का उपयोग करता है। यह डॉकटर-आधारित तैनाती के लिए काम नहीं कर सकता है।
आपको केवल अपनी परियोजना .config
की .ebextensions
निर्देशिका में अपनी फ़ाइलों में से एक को जोड़ने की आवश्यकता है :
files:
"/etc/httpd/conf.d/ssl_rewrite.conf":
mode: "000644"
owner: root
group: root
content: |
RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
</If>
व्याख्या
इलास्टिक बीनस्टॉक के बाहर यह मामूली सीधा है। एक आम तौर पर एक अपाचे पुनर्लेखन नियम को निम्नलिखित की तरह जोड़ता है:
RewriteCond %{HTTPS} off
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
या, अगर एक लोड बैलेंसर के पीछे, जैसे हम इस मामले में हैं:
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
हालाँकि, ये कॉन्फ़िगरेशन केवल एक <VirtualHost>
ब्लॉक के भीतर काम करते हैं । RewriteCond
एक <If>
ब्लॉक में बदलने से यह एक ब्लॉक के बाहर ठीक से काम करने की अनुमति देता है <VirtualHost>
, जिससे हमें स्टैंडअलोन अपाचे कॉन्फिगर फाइल में डालने की अनुमति मिलती है। ध्यान दें कि CentOS पर मानक Apache सेटअप (ElasticBeanstalk पर सेटअप सहित) मेल खाती हुई सभी फ़ाइलों को सम्मिलित करता है /etc/httpd/conf.d/*.conf
, जो उस फ़ाइल पथ से मेल खाती है जहाँ हम इस फ़ाइल को संग्रहीत कर रहे हैं।
-n '%{HTTP:X-Forwarded-Proto}'
यदि आप एक लोड बैलेंसर के पीछे नहीं हैं तो हालत का हिस्सा इसे पुनर्निर्देशन से रोकता है, जिससे आपको लोड बैलेंसर और https के साथ एक प्रोडक्शन एवरेज के बीच साझा कॉन्फ़िगरेशन की अनुमति मिलती है, और एक स्टेजिंग वातावरण जो एकल उदाहरण है और जिसमें https नहीं है। यह आवश्यक नहीं है यदि आप अपने सभी वातावरणों पर लोड बैलेंसर्स और https का उपयोग कर रहे हैं, लेकिन यह इसे चोट नहीं पहुंचाता है।
बुरा समाधान मैंने देखा है
मैंने इस समस्या का बहुत बुरा समाधान देखा है, और यह समझने लायक है कि यह समाधान क्यों आवश्यक है।
क्लाउडफ्रंट का उपयोग करें: कुछ लोग सुझाव देते हैं कि HTTP से HTTT रीडायरेक्ट करने के लिए Elastic Beanstalk के सामने नॉन-कैश्ड क्लाउडफ्रंट सेटअप का उपयोग करें। यह एक पूरी नई सेवा जोड़ता है (इस प्रकार जटिलता को जोड़ता है) जो बिल्कुल उपयुक्त नहीं है (क्लाउडफ्रंट एक सीडीएन है; यह स्वाभाविक रूप से गतिशील सामग्री पर HTTPS के लिए मजबूर करने का सही उपकरण नहीं है)। Apache config इस समस्या का सामान्य समाधान है और Elastic Beanstalk अपाचे का उपयोग करता है, इसीलिए हमें जाना चाहिए।
सर्वर में SSH और ...: यह पूरी तरह से इलास्टिक बीनस्टॉक के बिंदु के लिए विरोधी है और इसमें बहुत सारी समस्याएं हैं। ऑटोस्कोलिंग द्वारा बनाए गए किसी भी नए उदाहरण में संशोधित कॉन्फ़िगरेशन नहीं होगा। किसी भी क्लोन वातावरण का विन्यास नहीं होगा। पर्यावरण परिवर्तनों के उचित सेट की कोई भी संख्या कॉन्फ़िगरेशन को मिटा देगी। यह सिर्फ इतना बुरा विचार है।
Apache config को एक नई फ़ाइल के साथ अधिलेखित करें: यह समाधान के सही दायरे में आ रहा है, लेकिन यदि आप Elastic Beanstalk सर्वर सेटअप के पहलुओं (जो वे बहुत अच्छी तरह से कर सकते हैं) को बदल देते हैं, तो एक रखरखाव दुःस्वप्न के साथ छोड़ देता है। अगले आइटम में समस्याओं को भी देखें।
कुछ पंक्तियों को जोड़ने के लिए Apache config फाइल को डायनामिक रूप से संपादित करें: यह एक सभ्य विचार है। इसके साथ समस्या यह है कि यह काम नहीं करेगा यदि इलास्टिक बीनस्टॉक ने कभी भी अपनी डिफ़ॉल्ट अपाचे कॉन्फिग फ़ाइल का नाम बदल दिया, और यह कि जब आप कम से कम उम्मीद करते हैं तो यह फाइल अधिलेखित हो सकती है: https://forums.aws.amazon.com/thread .jspa? थ्रेडिड = 163369