लोचदार बीनस्टॉक पर https कैसे मजबूर करें?


79

मैं लोचदार बीनस्टॉक के मुफ्त उपयोग स्तरीय पर https को मजबूर करने के लिए प्रतीत नहीं कर सकता।

मैंने निम्नलिखित सुझाव की कोशिश की है कि स्वास्थ्य की जांच में विफल हुए बिना amazon इलास्टिक बीनस्टॉक पर https कैसे लागू करें

इस अपाचे का उपयोग नियम को फिर से लिखना

RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteCond %{REQUEST_URI} !^/status$ 
RewriteCond %{REQUEST_URI} !^/version$ 
RewriteCond %{REQUEST_URI} !^/_hostmanager/ 
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

जब मैं यह कोशिश करता हूं, तो http अनुरोधों को https पर पुनर्निर्देशित नहीं किया जाता है जैसा कि मैं चाहूंगा। इसके बजाय, http पृष्ठ सामान्य रूप से लोड होता है। मैंने उसी परिणाम के साथ एक्स-फॉरवर्ड-पोर्ट हेडर का उपयोग करने की भी कोशिश की है।

मैंने निम्नलिखित लिखित नियम का भी प्रयास किया है

RewriteCond %{SERVER_PORT} 80
RewriteRule . https://%{SERVER_NAME}%{REQUEST_URI} [L,R]

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

कृपया मदद करे। मैं AWS, इलास्टिक बीनस्टॉक के लिए नया हूं, और अपाचे नियमों से बहुत परिचित नहीं हूं। मुझे भी यकीन नहीं है कि यहाँ से कहाँ जाना है। धन्यवाद।


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

1
ऐसा लगता है कि इंटरनेट इस समस्या के एकल, पूर्ण और कार्यशील समाधान पर सहमत नहीं हो सकता है। उम्मीद है कि आपको मेरी पोस्ट में यहाँ कुछ मदद मिल सकती है । मुझे इसके साथ आने के लिए हुप्स के माध्यम से कूदना पड़ा, आखिरकार।
ADTC

क्या कोई यह जान सकता है कि मैं इसे कैसे बदल सकता हूं www को नॉन-www रिवाइरटाइनइन पर <if "-n '% {HTTP: X-Forwarded-Proto}' &&% {HTTP: X-Forwarded-Proto}! = = Https ' "> RewriteRule (। *) Https: //% {HTTP_HOST}% {REQUEST_URI} [R, L] </ If>
महेंद्र गर्ग

जवाबों:


178

यह उत्तर मानता है कि आपने लोड बैलेंसर सुरक्षा समूह में पहले ही 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 का उपयोग कर रहे हैं, लेकिन यह इसे चोट नहीं पहुंचाता है।

बुरा समाधान मैंने देखा है

मैंने इस समस्या का बहुत बुरा समाधान देखा है, और यह समझने लायक है कि यह समाधान क्यों आवश्यक है।

  1. क्लाउडफ्रंट का उपयोग करें: कुछ लोग सुझाव देते हैं कि HTTP से HTTT रीडायरेक्ट करने के लिए Elastic Beanstalk के सामने नॉन-कैश्ड क्लाउडफ्रंट सेटअप का उपयोग करें। यह एक पूरी नई सेवा जोड़ता है (इस प्रकार जटिलता को जोड़ता है) जो बिल्कुल उपयुक्त नहीं है (क्लाउडफ्रंट एक सीडीएन है; यह स्वाभाविक रूप से गतिशील सामग्री पर HTTPS के लिए मजबूर करने का सही उपकरण नहीं है)। Apache config इस समस्या का सामान्य समाधान है और Elastic Beanstalk अपाचे का उपयोग करता है, इसीलिए हमें जाना चाहिए।

  2. सर्वर में SSH और ...: यह पूरी तरह से इलास्टिक बीनस्टॉक के बिंदु के लिए विरोधी है और इसमें बहुत सारी समस्याएं हैं। ऑटोस्कोलिंग द्वारा बनाए गए किसी भी नए उदाहरण में संशोधित कॉन्फ़िगरेशन नहीं होगा। किसी भी क्लोन वातावरण का विन्यास नहीं होगा। पर्यावरण परिवर्तनों के उचित सेट की कोई भी संख्या कॉन्फ़िगरेशन को मिटा देगी। यह सिर्फ इतना बुरा विचार है।

  3. Apache config को एक नई फ़ाइल के साथ अधिलेखित करें: यह समाधान के सही दायरे में आ रहा है, लेकिन यदि आप Elastic Beanstalk सर्वर सेटअप के पहलुओं (जो वे बहुत अच्छी तरह से कर सकते हैं) को बदल देते हैं, तो एक रखरखाव दुःस्वप्न के साथ छोड़ देता है। अगले आइटम में समस्याओं को भी देखें।

  4. कुछ पंक्तियों को जोड़ने के लिए Apache config फाइल को डायनामिक रूप से संपादित करें: यह एक सभ्य विचार है। इसके साथ समस्या यह है कि यह काम नहीं करेगा यदि इलास्टिक बीनस्टॉक ने कभी भी अपनी डिफ़ॉल्ट अपाचे कॉन्फिग फ़ाइल का नाम बदल दिया, और यह कि जब आप कम से कम उम्मीद करते हैं तो यह फाइल अधिलेखित हो सकती है: https://forums.aws.amazon.com/thread .jspa? थ्रेडिड = 163369


3
उत्कृष्ट जवाब, यह पूरी तरह से काम किया। मेरे पास अभी तक मेरे प्रोजेक्ट में एक -extxtensions डायरेक्टरी नहीं है, इसलिए मैंने एक बनाया और मनमाने ढंग से नामित .conf फ़ाइल में आपका कॉन्फिगरेशन डाल दिया। मैं लोचदार बीनस्टॉक कंसोल पर सेटिंग्स में नियमित पोर्ट को अक्षम रखने में सक्षम था, जो आदर्श लगता है।
टायलर

4
यह एक शानदार उत्तर है, वास्तव में पृष्ठ के शीर्ष पर होना चाहिए। @landland आपको इस उत्तर को स्वीकार करना चाहिए।
gtd

1
उत्कृष्ट और साफ जवाब, मेरे लिए सहज काम किया। मैंने R=301स्थायी पुनर्निर्देश भेजने के लिए जोड़ा ।
लोकाग

1
मुझे पछतावा है कि मेरे पास देने के लिए केवल एक उत्थान है। बहुत बड़ी समस्या यह है कि AWS मंचों का इसके लिए गलत उत्तर है!
Cfreak

2
किसी कारण से यह मेरे लिए काम नहीं करता है। ssl_rewrite.confफ़ाइल बनाई गई है (के साथ सत्यापित eb ssh), लेकिन कोई रीडायरेक्ट होता है। : S
mb21

16

EDIT: जबकि मुझे यह जवाब पसंद है, यह अब बहुत पुराना हैAWS नई सेवाओं (जैसे सर्टिफिकेट मैनेजर ) के साथ आई है जो इस उत्तर का हिस्सा अप्रचलित है। इसके अतिरिक्त, .ebextensionsअपाचे के साथ फ़ोल्डर का उपयोग करना ऊपर बताए अनुसार इस पुनर्निर्देशन को संभालने के लिए एक क्लीनर तरीका है।

यदि आप अपनी वेबसाइट को S3 पर होस्ट कर रहे हैं, तो इस उत्तर के भाग आपके लिए उपयोगी हो सकते हैं।


यह मेरे लिए काम किया:

  1. awsकंसोल कमांड का उपयोग करके प्रमाण पत्र को AWS पर अपलोड करें । कमांड संरचना है:

    aws iam upload-server-certificate --server-certificate-name CERTIFICATE_NAME --certificate-body "file://PATH_TO_CERTIFICATE.crt" --private-key "file://YOUR_PRIVATE_KEY.pem" --certificate-chain "file://YOUR_CERTIFICATE_CHAIN.ca-bundle" --path /cloudfront/
    
  2. अपने इलास्टिक बीनस्टॉक एप्लिकेशन में, कॉन्फ़िगरेशन -> नेटवर्क टीयर -> लोड संतुलन पर जाएं और गियर आइकन पर क्लिक करें ।

  3. 443 के रूप में सुरक्षित श्रोता पोर्ट चुनें । HTTPS के रूप में प्रोटोकॉल का चयन करें । एसएसएल सर्टिफिकेट आईडी के लिए चरण 2 से चयन करें । कॉन्फ़िगरेशन सहेजें।CERTIFICATE_NAME

  4. अपने कंसोल पर जाएं । EC2 इंस्टेंस पर क्लिक करें । लोड Balancers पर क्लिक करें । लोड बैलेंसर्स के माध्यम से क्लिक करें। इंस्टेंस पर क्लिक करें और EC2 इंस्टेंस को उस लोड बैलेंसर को देखने के लिए नीचे स्क्रॉल करें । यदि EC2 उदाहरण में आपके एप्लिकेशन URL (या कुछ करीबी) के समान नाम है , तो लोड बैलेंसर के लिए DNS नाम पर ध्यान दें । यह प्रारूप में होना चाहिएawseb-e-...

  5. अपने कंसोल पर वापस जाएं । CloudFront पर क्लिक करें । वितरण बनाएँ पर क्लिक करें । एक वेब वितरण का चयन करें ।

  6. वितरण सेट करें। अपने मूल डोमेन नाम को लोड बैलेंसर DNS नाम से सेट करें जिसे आपने चरण 5 में पाया था । HTTP प्रोटोकॉल को HTTPS में रीडायरेक्ट करने के लिए सेट करें । अग्रेषित क्वेरी स्ट्रिंग्स को हां पर सेट करें । उस वैकल्पिक डोमेन नाम (CNAME) को उस URL पर सेट करें जिसे आप अपने आवेदन के लिए उपयोग करना चाहते हैं। चरण 2 में आपके द्वारा अपलोड किए गए SSL प्रमाणपत्र को सेट करें । अपना वितरण बनाएँ।CERTIFICATE_NAME

  7. CloudFront में अपने वितरण नाम पर क्लिक करें। मूल पर क्लिक करें , अपने मूल का चयन करें, और संपादित करें पर क्लिक करें । सुनिश्चित करें कि आपका उत्पत्ति प्रोटोकॉल नीति है मैच व्यूअर । वापस जाओ। व्यवहार पर क्लिक करें , अपने मूल का चयन करें, और संपादित करें पर क्लिक करेंफॉरवर्ड हेडर्स को श्वेतसूची में बदलें और होस्ट जोड़ें । सहेजें।

नोट: मैंने एक लंबा गाइड भी लिखा है


ठीक यही किया, लेकिन यह मुझे "अनुरोध को संतुष्ट नहीं कर सका।" "CloudFront मूल से कनेक्ट करने में सक्षम नहीं थी।", केवल जब मैं होस्ट हेडर को श्वेत सूची में रखता हूं। अगर मैं हेडर को किसी को भी सेट नहीं करता हूं, तो यह काम करता है, लेकिन यह https पर पुनर्निर्देशित नहीं करता है, सभी HTTP अनुरोध http रहते हैं। कोई विचार?
व्लाद

@ क्या आप अपनी पूरी इलास्टिकबैंक.कॉन्फ़ फ़ाइल यहाँ पेस्ट कर सकते हैं? या मुझे इसका लिंक दें?
thekosmix

@thekosmix elasticbeanstalk.confजब तक आप ऊपर के गाइड में सेटिंग्स को ओवरराइड नहीं कर रहे हैं, फ़ाइल को वास्तव में यहाँ नहीं आना चाहिए।
एडम लिंक

लेकिन लोड बैलेंसर के भीतर ec2 उदाहरण (उनका DNS) अल्पकालिक है, है ना? मुझे यकीन नहीं है कि आपको पूरी तरह से त्रुटिपूर्ण समाधान के लिए इतने सारे वोट मिले हैं।
थेमीहाई

@themihai यह वास्तव में सही नहीं है - समाधान EC2 DNS या IP (जो कि अल्पकालिक है) का उपयोग नहीं करता है। आपके द्वारा प्राप्त किया जा रहा DNS URL पर्यावरण के लिए स्थिर है। EC2 चरण 6 में उपयोग के लिए DNS URL प्राप्त करना है, जहां आप परिवेश को CloudFront वितरण से जोड़ रहे हैं। ऊपर दिया गया समाधान काम नहीं कर सकता है, क्योंकि यह एक साल पुराना है, लेकिन यह निश्चित रूप से तब हुआ जब मैंने इसे पोस्ट किया।
एडम लिंक

6

सबसे अधिक उत्थान मेरे लिए काम नहीं करता है .. < if > निर्देश केवल Apache 2.4+ के साथ काम करता है, लेकिन ElasticBeanstalk का संस्करण 2.2.x है।

तो, ऊपर के रूप में एक ही सलाह का पालन। निम्न सामग्री के साथ .extxtensions / https_rewrite.config नामक एक फ़ाइल बनाएँ

files:
    "/etc/httpd/conf.d/ssl_rewrite.conf":
        mode: "000644"
        owner: root
        group: root
        content: |
            LoadModule rewrite_module modules/mod_rewrite.so
            RewriteEngine On
            # This will enable the Rewrite capabilities
            RewriteCond %{HTTPS} !=on
            # This checks to make sure the connection is not already HTTPS
            RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R,L]

यह मेरे लिए काम करने लगता है।

इस फ़ाइल को अपनी WAR फ़ाइल में कैसे बनाएँ, इस उत्तर को देखें


1
इस उत्तर के बारे में अतिरिक्त नोट: <if> ब्लॉक 2.4 में नया था और 2.2 में काम नहीं करता है, यही कारण है कि आप इसे यहां नहीं देखते हैं।
fivedogit

EB PHP सॉल्यूशन स्टैक अब सभी Apache
2.4+ का

5

नए आवेदन लोड Balancers के साथ आप यह काफी तुच्छ अब कर सकते हैं ...

जब आप ईबी वातावरण सेटअप करते हैं (तब भी क्लासिक लोड बैलेंसर मुझे विश्वास है) में आपको इनमें से एक सेटअप करना सुनिश्चित करें। वातावरण बनने के बाद आप प्रकार नहीं बदल सकते, इसलिए इसे पुनः बनाएँ

एक बार यह पूरा हो जाने के बाद, अपनी EC2 सेटिंग -> Balancers लोड करें। आपके ईबी वातावरण के लिए आपके द्वारा बनाए गए लोड बैलेंसर पर क्लिक करें। आपको यह सुनिश्चित करना होगा कि आपने इस कार्य से पहले एक HTTPS श्रोता को सेटअप किया है इसलिए सुनिश्चित करें कि आप HTTPS 443 पर SSL सर्टिफिकेट के साथ सुनें और 80 पर HTTP के साथ अपने इंस्ट्रूमेंट्स को फॉरवर्ड करें।

फिर एक नया श्रोता जोड़ें जो HTTP पर सुनता है और "रीडायरेक्ट टू:" की डिफ़ॉल्ट क्रिया जोड़ता है। सुनिश्चित करें कि आप HTTPS को प्रोटोकॉल के रूप में सेट करते हैं, 443 पोर्ट के रूप में, "मूल होस्ट, पथ, क्वेरी" विकल्प के रूप में और अंत में HTTP प्रतिक्रिया कोड के रूप में 301।

एक बार यह श्रोता जुड़ने के बाद सुनिश्चित करें कि आप HTTPS और HTTP दोनों कनेक्शनों को स्वीकार करने के लिए अपने EC2 लोड बैलेंसर सुरक्षा समूह को अपडेट करें, आपको सुनने के लिए श्रोता पर छोटे चेतावनी चिन्ह दिखाई देंगे!

क्रिस


धन्यवाद, मुझे यह मेरे www के लिए काम करने के लिए मिला। मार्ग लेकिन नग्न डोमेन नहीं। ऐसा क्यों हो सकता है पर कोई सुझाव?
क्रिस

4

संपादित करें: ज़ग्स समाधान अधिक सामान्य और सही है। मैं इसे अपना होने की सलाह देता हूं (जो एक अजगर के लिए विशिष्ट है)

यहाँ एक साफ और त्वरित समाधान है जो मैं उस के साथ आया था जो wsgi.conf को हैक करने या CloudFront का उपयोग करने से बचता है

अपने .ebextensions / some_file.config में:

# Redirect HTTP to HTTPS
  "/etc/httpd/conf.d/https_redirect.conf":
    mode: "000644"
    owner: root
    group: root
    content: |
      <Directory /opt/python/current/app/>
      RewriteEngine on
      RewriteCond %{HTTP:X-Forwarded-Proto} ^http$
      RewriteRule .* https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
      </Directory>

मुझे लगता है कि यह बहुत आसान है, लेकिन लगता है कि यह ठीक काम कर रहा है।

यह भी ध्यान दें कि मैं "नहीं HTTPS" के बजाय HTTP को स्पष्ट रूप से पुनर्निर्देशित कर रहा हूं।


इसलिए मुझे यह काम ईबीएस के माहौल में मिला। /etc/httpd/conf.d/https_redirect.conf मौजूद है और यह https पर रीडायरेक्ट करता है। समस्या एक दूसरे वातावरण पर है, बिल्कुल उसी तरह से सेटअप, फ़ाइल /etc/httpd/conf.d/https_redirect.conf नहीं है। कोई विचार?
निट्ज़ान विल्नाई

@NitzanWilnai /etc/httpd/conf.d/https_redirect.confमौजूद नहीं है, जवाब
अनातोली

1
/Etc/httpd/conf.d में एक फ़ाइल जोड़ना एक महान विचार था। इससे मुझे सामान्य समाधान करने में मदद मिली ( stackoverflow.com/a/38751749/2800876 )
Zags

4

मैं 2018 में भारोत्तोलक के साथ एक लोचदार बीनस्टॉक को पुनर्निर्देशित करने की कोशिश कर रहा हूं। उपरोक्त में से कोई भी उत्तर मेरे वातावरण में काम नहीं करता है। कई मुद्दों पर मैं घेर लिया:

  1. मैं सबसे अधिक वोट किए गए उत्तर की कोशिश कर रहा था, लेकिन मेरा टोमैट संस्करण 2.7 है। यह समर्थन नहीं करता है।

  2. मैं कंटेनर_का उपयोग कर रहा था और 00_applications सेटिंग की प्रतिलिपि बना रहा था। AWS बस इसे अनदेखा करता है।

तो आखिरकार मुझे इसे पढ़कर काम मिल गया: https://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-tomcat-proxy.html

ये है जो मैं करता हूं:

मैंने फ़ोल्डर संरचना को फिर से बनाया:

.ebextensions 
 - httpd
  -conf.d
   -ssl.conf

और फिर यह ssl.conf की सामग्री है

<VirtualHost *:80>
  RewriteEngine on
  RewriteCond %{HTTP:X-Forwarded-Proto} =http
  RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
  <Proxy *>
    Order Allow,Deny
    Allow from all
  </Proxy>
  ProxyPass / http://localhost:8080/ retry=0
  ProxyPassReverse / http://localhost:8080/
  ProxyPreserveHost on

  ErrorLog /var/log/httpd/elasticbeanstalk-error_log
</VirtualHost>

आशा है कि यह मदद करेगा।


यह https पर रीडायरेक्ट करता है, लेकिन यह कहता है कि सर्वर नहीं मिला। मैं वसंत एमवीसी वेब ऐप
पोनराज

मैं इसे nginx: [emerg] unknown directive "<VirtualHost" जोड़ने के बाद EB लॉग में प्राप्त कर रहा हूं । इस व्यवहार को देखकर कोई और?
फेबियन

3

यह मेरे लिए अगले कमांड के साथ काम करता है:

RewriteCond %{HTTP:X-Forwarded-Port} !=443

और https जाँच के बिना:

RewriteCond %{HTTP:X-Forwarded-Proto} !https

ऐसा लग रहा है कि ईएलबी एक्स-फॉरवर्ड-प्रोटो के मान को बदलकर http (यहां तक ​​कि टीसीपी प्रोटोकॉल पर भी) कर सकता है।


यह स्वीकृत उत्तर होना चाहिए। हेडर प्रलेखित हैं ताकि आप उन पर भरोसा कर सकें। docs.aws.amazon.com/ElasticLoadBalancing/latest/DeveloperGuide/…
themihai

3

उपर्युक्त उत्तरों में से किसी ने भी मेरे लिए काम नहीं किया, लेकिन कुछ ने मेरे लिए काम करने वाले उत्तर का पता लगाने में मदद की, साथ ही मैंने नीचे दिए गए url को भी देखा, जिसने http://docs.aws.amazon.com/elasticbeanstalk/latest/dg/java-omomcat मदद की -platform.html

मैंने 2 फ़ाइल httpd.conf 00_application.conf को बदलने के लिए url के ऊपर उल्लिखित फ़ाइल संरचना बनाई

अपने http से पूरे httpd.conf को कॉपी करें और इसे अपने कोड में रखें। उपरोक्त लिंक में बताए गए फ़ोल्डर संरचना के तहत .bextention। फिर बस अपने प्रोजेक्ट में उस फ़ाइल के नीचे की पंक्ति जोड़ें

LoadModule rewrite_module modules/mod_rewrite.so

00_application.conf के लिए भी ऐसा ही करें, इसे अपने उदाहरण से कॉपी करें और इसे अपने कोडबेस में रखें। http: // httpd / conf.d / flexbeanstalk / 00_application.conf के तहत नोटबंदी करें। अब इस फ़ाइल को संपादित करें और VirtualHost के बीच नीचे जोड़ें।

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]

अब अपना कोड तैनात करें यह काम करना चाहिए।


2

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

बस पथ के तहत निम्न फ़ाइल जोड़ें: .extxtensions \ httpd \ conf.d

फ़ाइल सामग्री:

<VirtualHost *:80>
   LoadModule rewrite_module modules/mod_rewrite.so

   RewriteEngine On
   RewriteCond %{HTTP:X-Forwarded-Proto} !https
   RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

   <Proxy *>
     Order deny,allow
     Allow from all
   </Proxy>

   ProxyPass / http://localhost:8080/ retry=0
   ProxyPassReverse / http://localhost:8080/
   ProxyPreserveHost on

   ErrorLog /var/log/httpd/elasticbeanstalk-error_log

</VirtualHost>

'.Ebextensions' AWS में मानक कॉन्फ़िगरेशन फ़ोल्डर है और बाकी केवल उस फ़ाइल और फ़ोल्डर को इंगित करता है जिसे आप अधिलेखित करना चाहते हैं। यदि फ़ाइल या फ़ोल्डर मौजूद नहीं है, तो उन्हें बनाएँ।


2

मुझे यह पता लगाने में मुश्किल समय लगा, इसलिए जब मैं एक समाधान के साथ आया तो मैंने अपने समाधान की विस्तृत व्याख्या लिखी, ताकि किसी और की मदद कर सकूं। यह Tomcat 8, Apache2 और स्प्रिंग बूट ऐप के लिए विशिष्ट है। AWS लैब्स जीथब में वास्तव में उपयोगी ebextension उदाहरण हैं

मेरे लिए काम करने का सारांश:

  1. /Src/main/webapp/.ebextensions/httpd/conf.d/elasticbeanstalk.conf पर एक फ़ाइल बनाएँ
  2. "लोडमोडुले rewrite_module मॉड्यूल / mod_rewrite .so" को शामिल करने के लिए सावधान रहने वाले शंकु / नियम जोड़ें
  3. AWS EBS में तैनात करें

यहां एक उदाहरण स्प्रिंग बूट ऐप है


1

मेरे पास लोचदार बीनस्टॉक के लिए कॉन्फ़िगरेशन है (64 बिट अमेज़ॅन लिनक्स 2016.09 v2.3.1 चल टॉमकैट 8 जावा 8)। मैंने एक निर्देशिका .extxtensions बनाया और एक .config YAML फ़ाइल को फिर से लिखने की शर्तों के साथ जोड़ा

ऊपर वर्णित ज़गास समाधान (जो बहुत जटिल है) मेरे लिए काम नहीं करता है।

  1. क्योंकि "यदि" स्थिति अज्ञात है
  2. अपाचे 2.2 की वजह से मेरे पास http_rewrite.so नहीं है जो मेरी httpd.conf फ़ाइल में शामिल है

यह समाधान मेरे लिए अधिक समझ में आता है, लेकिन यह भी काम नहीं करता है। कुछ नहीं होता है, और मैं फ़ाइल "ssl_rewrite.conf" को "conf.d" निर्देशिका के अंतर्गत नहीं देख सकता।

तीसरी कोशिश समाधान ".ebextendion" निर्देशिका के तहत "run.config" और "ssl_rewrite.conf" फ़ाइलों को जोड़ना था।

run_config में सम्‍मिलित है

container_commands:
copy-config:
command: "cp .ebextensions/ssl_rewrite.conf /etc/httpd/conf.d"

ssl_rewrite.conf समाहित है

LoadModule rewrite_module modules/mod_rewrite.so
RewriteEngine On
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule . https://%{HTTP:Host}%{REQUEST_URI} [L,R=permanent]

ssl_rewrite.conf "conf.d" direcotry के तहत बनाया गया है, लेकिन http से https तक रीडायरेक्ट नहीं होता है।

मेरे लिए एकमात्र काम समाधान "/etc/httpd/conf.d/elasticbeanstalk/00_application.conf" में निम्नलिखित पंक्तियों को जोड़ना था।

<VirtualHost *:80>
......
RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} =http
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]
......
</VirtualHost>

लेकिन यह एक अस्थायी समाधान है और अगर किसी मशीन को बदल दिया जाए तो मेरा https पुनर्निर्देशन समाप्त हो जाता है।


"अगर एक मशीन को बदल दिया जाता है तो मेरा https पुनर्निर्देशन समाप्त हो जाता है" मुझे लगता है कि आप उसी तरह की चाल का उपयोग कर सकते हैं जो ज़ैग के उत्तर में दिखाई गई फ़ाइल को स्वचालित रूप से लिखने के लिए होती है जब ईएलबी एक नए उदाहरण में एप्लिकेशन को हटाता है। मूल रूप से, अपनी फ़ाइल का पथ files:, फ़ाइल सामग्री के अंतर्गत content: |और उचित मोड, स्वामी और समूह सेट करें। ELB तब आपके लिए, स्वचालित रूप से फ़ाइल बनाएगा।
ADTC

मैंने इस फ़ाइल को एप्लिकेशन के भाग के रूप में तैनात करने के लिए उपरोक्त विधि (अपनी टिप्पणी में) का उपयोग किया है (बजाय इसे सीधे वर्तमान उदाहरण में लिखने के)। मैंने SSH के माध्यम से जाँच की कि फ़ाइल मौजूद है। हालाँकि, यह मेरे लिए भी काम नहीं करता था, बावजूद इसके सेटअप आपके बहुत करीब था: 64 बिट अमेज़ॅन लिनक्स 2016.03 v2.1.1 चल रहा है टॉमकैट 8 जावा 8 एक बात हालांकि, फ़ाइल मूल रूप से मौजूद नहीं थी - यह नया बनाया गया था । क्या मुझे /etc/httpd/conf.d/elasticbeanstalk.confइसके बजाय संपादन करना चाहिए ?
ADTC

1

बस किसी भी मामले में अभी भी संघर्ष कर रहा है:

मैंने कुछ समय के लिए संघर्ष किया है और आखिरकार, मैंने सभी AWS कॉन्फिग्स के साथ GitHub (AWS टीम से) पाया है और नीचे दिया गया उदाहरण Apache 2.2 के लिए HTTP> HTTPS पुनर्निर्देशन के लिए काम करता है। (Apache 2.4 और Nginx के लिए विन्यास के लिए कृपया नीचे दिया गया लिंक देखें)।

अपाचे २.२

  1. अपने ऐप की रूट डायरेक्टरी में एक फाइल बनाएं: Your_PROJECT_ROOT / .ebextensions / httpd / conf.d / flexbeanstalk.conf (IntelliJ / Java का उपयोग करने के मामले में सुनिश्चित करें कि यह अंतिम में जोड़ा गया है। WAR विरूपण साक्ष्य)।

  2. वर्चुअल होस्ट में पुनर्निर्देशन को सक्षम करने के लिए निम्न पंक्तियाँ जोड़ें:

    <VirtualHost *:80>
        LoadModule rewrite_module modules/mod_rewrite.so
        RewriteEngine On
        RewriteCond %{HTTP:X-Forwarded-Proto} !https
        RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker
        RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}
    
        <Proxy *>
            Order deny,allow
            Allow from all
        </Proxy>
    
        ProxyPass / http://localhost:8080/ retry=0
        ProxyPassReverse / http://localhost:8080/
        ProxyPreserveHost on
    
        ErrorLog /var/log/httpd/elasticbeanstalk-error_log
    </VirtualHost>
    

Apache 2.4 और Nginx के अन्य उदाहरणों के लिए कृपया इस GitHub रिपॉजिटरी पर जाएँ:

https://github.com/awsdocs/elastic-beanstalk-samples/tree/master/configuration-files/aws-provided/security-configuration/https-navirect-java-tomcat

इसके अलावा, बहुत अधिक उपयोगी कॉन्फ़िगरेशन और उदाहरण उपलब्ध हैं।

सादर


1

एक पर्यावरण चर के माध्यम से HTTPS को सक्षम करना

मुझे केवल अपने उत्पादन वातावरण के लिए HTTPS लागू करने की आवश्यकता है, और विकास और मंचन के लिए नहीं जो इलास्टिक बीनस्टॉक पर हैं, लेकिन एक लोड बैलेंसर का उपयोग नहीं करते हैं (और इसलिए सीधे प्रमाण पत्र नहीं सौंपा जा सकता है)।

मैं एक पर्यावरण चर का उपयोग करता हूं USE_HTTPS। हम ssl_rewrite.confफ़ाइल को कॉपी करते हैं यदि और केवल अगर USE_HTTPSसेट किया गया हैtrue

.ebextensions / फ़ाइलें / ssl_rewrite.conf

RewriteEngine On
<If "-n '%{HTTP:X-Forwarded-Proto}' && %{HTTP:X-Forwarded-Proto} != 'https'">
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R=301,L]
</If>

.ebextensions / https.config

files:
  "/home/ec2-user/https_setup.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
      #!/bin/bash

      echo "USE_HTTPS env var: ${USE_HTTPS,,}"
      outfile=/etc/httpd/conf.d/ssl_rewrite.conf
      if [ "${USE_HTTPS,,}" == "true" ]; then
        echo "Configure SSL rewrite"
        cp .ebextensions/files/ssl_rewrite.conf $outfile
        chmod 644 $outfile
        chown root:root $outfile
      else
        [ -f $outfile ] && rm $outfile
        echo "Do not use SSL"
        exit 0
      fi

container_commands:
  01_https_setup:
    command: "/home/ec2-user/https_setup.sh"

ध्यान दें कि यदि आप बदलते हैं USE_HTTPS, तो आपको प्रभावी होने के लिए अपने आवेदन को फिर से तैयार करना होगा। आप चाहें तो फाइल echoमें कमांड भी हटा सकते हैं https.config


1

AWS के पास कुछ दस्तावेज भी हैंइस पर ।

यदि आप एप्लिकेशन लोड बैलेंसर का उपयोग कर रहे हैं, तो फ़ाइल http-to-https.configको अपने .ebextensionsफ़ोल्डर में जोड़ें और फिर निम्न कॉन्फ़िगरेशन जोड़ें ( अपने https प्रमाणपत्र के ARN में डालना न भूलें ):

नोट: कृपया सुनिश्चित करें कि आपने EB कंसोल के माध्यम से पोर्ट 443 पर श्रोता नहीं जोड़ा है। यदि आपने ऐसा किया है, तो .config फ़ाइल को जोड़ने से पहले श्रोता को हटा दें।

Resources:
  AWSEBV2LoadBalancerListener:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      DefaultActions:
        - Type: redirect
          RedirectConfig:
            Protocol: HTTPS
            Port: '443'
            Host: '#{host}'
            Path: '/#{path}'
            Query: '#{query}'
            StatusCode: HTTP_301
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 80
      Protocol: HTTP
  AWSEBV2LoadBalancerListenerHTTPS:
    Type: 'AWS::ElasticLoadBalancingV2::Listener'
    Properties:
      Certificates:
        - CertificateArn: Replace with Certificate ARN
      DefaultActions:
        - Type: forward
          TargetGroupArn:
            Ref: AWSEBV2LoadBalancerTargetGroup
      LoadBalancerArn:
        Ref: AWSEBV2LoadBalancer
      Port: 443
      Protocol: HTTPS 

इसके लिए अपने एलबी का उपयोग करने का लाभ यह है कि आपका कॉन्फ़िगरेशन आपके द्वारा उपयोग किए जाने वाले सर्वर जैसे नगनेक्स, अपाचे, आदि के लिए अज्ञेय होगा।


1

मुझे यहाँ से एक उत्तर मिला से मददगार होने का ।

मेरे द्वारा किए गए सभी आवेदन लोड बैलेंसर डिफ़ॉल्ट प्रक्रिया के /index.phpबजाय स्वास्थ्य जांच पथ बना /रहे थे।


0

तुम बस रूट फ़ोल्डर में एक .htaccess फ़ाइल क्यों नहीं डालते? इस तरह आप बस इसे टेस्ट और डिबग कर सकते हैं। और अगर आप इसे .zip में शामिल करते हैं, तो यह स्वचालित रूप से सभी उदाहरणों पर फिर से तैनात हो जाएगा।

बस उपयोग करें .htaccess:

RewriteEngine on
RewriteCond %{HTTP:X-Forwarded-Proto} !https
RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI} [R,L]

0

कृपया ध्यान दें कि सबसे अधिक मतदान का उत्तर अब थोड़ा पुराना है। ए पॉल का जवाब वास्तव में सही उत्तर है। उनके जवाब में दिया गया लिंक AWS द्वारा दिया गया है (इसलिए यह इलास्टिक बीनस्टॉक पर आपके एप्लिकेशन को चलाते समय HTTP से HTTPS पर पुनर्निर्देशन करने के लिए आपके अपाचे कॉन्फ़िगरेशन को ओवरराइड करने की अनुशंसित विधि है)।

ध्यान देने योग्य एक बहुत महत्वपूर्ण बात है। यदि आप 1 से अधिक वेब ऐप की तैनाती कर रहे हैं, तो आपके वेब ऐप में से एक के अंदर .extensions फ़ोल्डर जोड़ना काम नहीं कर रहा है। आप देखेंगे कि आपके द्वारा निर्दिष्ट कॉन्फ़िगरेशन में से गैर लिखे जा रहे हैं या बनाए जा रहे हैं। यदि आप लोचदार बीनस्टॉक पर्यावरण पर कई वेब एप्स की तैनाती कर रहे हैं, तो आपको इस लेख को पढ़ने की आवश्यकता होगी AWS Java Tomcat द्वारा Elastic Beanstalk पर कई WAR फ़ाइलों की तैनाती करें

सामान्य तौर पर, आपको WAR फ़ाइलों को लागू करने के लिए उस पर ईब कमांड जारी करने से पहले निम्न संरचना की आवश्यकता होगी:

MyApplication.zip
├── .ebextensions
├── foo.war
├── bar.war
└── ROOT.war

अगर .ebextentions फ़ोल्डर प्रत्येक WAR फ़ाइल के अंदर मौजूद है, तो आप देखेंगे कि यह पूरी तरह से अनदेखा है और कोई कॉन्फ़िगरेशन परिवर्तन नहीं किया जाएगा।

मनाइए कि यह किसी और के लिए सहायक हो।


0

हमने इसे X-Forwarded-Protoठीक से संभालकर अपने बैकएंड पर हल किया है।

यह हमारी ग्रिल्स कॉन्फिग है लेकिन यह आपको इस विचार के साथ मदद करेगा:

    grails.plugin.springsecurity.secureChannel.useHeaderCheckChannelSecurity = true
    grails.plugin.springsecurity.portMapper.httpPort = 80
    grails.plugin.springsecurity.portMapper.httpsPort = 443
    grails.plugin.springsecurity.secureChannel.secureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.secureHeaderValue = 'http'
    grails.plugin.springsecurity.secureChannel.insecureHeaderName = 'X-Forwarded-Proto'
    grails.plugin.springsecurity.secureChannel.insecureHeaderValue = 'https'
    grails.plugin.springsecurity.secureChannel.definition = [
        [pattern: '/**', access: 'REQUIRES_SECURE_CHANNEL']
    ]

0

इस सवाल का एक और दो उत्तर देने के लिए https://stackoverflow.com/a/43026082/8775205 , https://stackoverflow.com/a/42035023/8775205 । स्प्रिंग बूट उपयोगकर्ताओं के लिए जो अपनी सेवाओं को ईएलबी के साथ एडब्ल्यूएस पर तैनात करते हैं, और कदम गाइड द्वारा कदम की आवश्यकता होती है, आप अपने प्रोजेक्ट में src / main / webapp / .ebextensions / httpd / conf.d / के तहत एक ****। Conf फ़ाइल जोड़ सकते हैं। ।

src
--main
----java
----resources
----webapps
------.ebextensions
--------httpd
----------confd
------------****.conf

****। कॉन्फिडेंस निम्न की तरह दिखता है। ध्यान दिया कि मेरे पास एक उदाहरण के साथ मेरी परीक्षण साइट है, इसलिए मैं इसे बाहर करने के लिए एक शर्त जोड़ता हूं।

<VirtualHost *:80>
   LoadModule rewrite_module modules/mod_rewrite.so

   RewriteEngine On
   RewriteCond %{HTTP:X-Forwarded-Proto} !https
   RewriteCond %{HTTP_USER_AGENT} !ELB-HealthChecker 
   RewriteCond %{HTTP_HOST} !testexample.com #excludes test site
   RewriteRule (.*) https://%{HTTP_HOST}%{REQUEST_URI}

   <Proxy *>
     Order deny,allow
     Allow from all
   </Proxy>

   ProxyPass / http://localhost:8080/ retry=0
   ProxyPassReverse / http://localhost:8080/
   ProxyPreserveHost on

   ErrorLog /var/log/httpd/elasticbeanstalk-error_log

</VirtualHost>

इसके बाद, उपरोक्त कॉन्फ़िगरेशन को लेने के लिए अपने pom.xml में मावेन-युद्ध-प्लगइन के तहत "संसाधन" जोड़ना याद रखें।

<plugin>
     <groupId>org.apache.maven.plugins</groupId>  
     <artifactId>maven-war-plugin</artifactId>  
     <configuration>  
         <webResources>
             <resource>  
               <!-- some other resource configured by yourself-->
             </resource> 
             <resource>
                <directory>src/main/webapps/.ebextensions</directory>
                 <targetPath>.ebextensions</targetPath>
                 <filtering>true</filtering>
             </resource> 
         </webResources>  
     </configuration>  
     <version>2.1.1</version>
 </plugin>

अंत में अपने कोड को कमिट करें और पुश करें, अपने कोड को रिपॉजिटरी से लेने और बीनस्टॉक वातावरण में तैनात करने के लिए AWS कोडबिल्ट और कोडपिपलीन प्रतीक्षा करें, या बस अपनी परियोजना को एक युद्ध फ़ाइल में पैक करें और इसे अपने AWS बीनस्टॉक वातावरण में अपलोड करें


0

एडब्ल्यूएस headders में unserscores (_) को स्वीकार नहीं करते हैं, हम उपयोग कर सकते हैं, जबकि (-), तो, शीर्ष लेख चर से अंडरस्कोर निकालें उदाहरण: - header_var_val = "कुछ मूल्य" के साथ बदलने headervarval = "कुछ मूल्य" । इससे मेरा काम बनता है।


-4

यदि आप एक लोड बैलेंस्ड वातावरण का उपयोग करते हैं, तो आप अपने AWS इलास्टिक बीनस्टॉक पर्यावरण के लिए HTTPS को कॉन्फ़िगर करने के लिए निर्देशों का पालन कर सकते हैं और अंत में HTTP पोर्ट को अक्षम कर सकते हैं।

ध्यान दें कि वर्तमान में AWS फ्री यूसेज टियर में एक लोचदार लोड संतुलन (ELB) के लिए समान मात्रा में EC2 माइक्रो इंस्टेंस के रूप में शामिल हैं।


7
इस तरह आप केवल HTTPS को सक्षम करते हैं लेकिन आप इसे लागू नहीं करते हैं। लागू करने का अर्थ है कि आप स्वचालित रूप से सभी HTTP अनुरोधों को HTTPS पर पुनर्निर्देशित कर देते हैं।
बैस्टियन वेंथुर

-4

यह एक आसान उपाय है

  1. अपने EC2 उदाहरण में ssh
  2. /etc/httpd/conf.d/wsgi.conf की सामग्री को एक स्थानीय फ़ाइल में कॉपी करें जिसे wsgi.conf कहा जाता है जिसे आपके आवेदन के आधार फ़ोल्डर में रखा जाएगा।
  3. Wsgi.conf के स्थानीय संस्करण को संपादित करें और <VirtualHost> </ VirtualHost> टैग के भीतर निम्नलिखित रीडायरेक्ट नियम जोड़ें

    RewriteEngine On
    RewriteCond %{HTTP:X-Forwarded-Proto} !https
    RewriteRule !/status https://%{SERVER_NAME}%{REQUEST_URI} [L,R=301]
    
  4. स्वास्थ्य जांच पृष्ठ के रूप में आप जो भी पृष्ठ उपयोग कर रहे हैं , उसे "/ स्थिति" में बदलें ।

  5. फ़ाइल सहेजें
  6. अपने <app> .conf फ़ाइल को अपने अंदर संपादित करें।  अमेज़न के संस्करण पर wsgi.conf के इस संस्करण को कॉपी करने के लिए एक कंटेनर कमांड जोड़ने के लिए ebextensions निर्देशिका

    container_commands:
    01_syncdb:
      command: "django-admin.py syncdb --noinput" leader_only: true
    02_collectstatic:
      command: "django-admin.py collectstatic --noinput"
    03_wsgireplace:
      command: 'cp wsgi.conf ../wsgi.conf'
    ...
    
  7. कोड तैनात करें।

  8. /Etc/httd/conf.d/wsgi.conf पर wsg.conf के तैनात संस्करण में अब आवश्यक पुनर्निर्देशन नियम शामिल होंगे।

यह काम करना चाहिए और प्रत्येक तैनाती के लिए फ़ाइल को ठीक से अपडेट किया जाएगा। देखने वाली एकमात्र बात यह है कि अगर अमेज़न भविष्य में अपने आधार wsgi.conf फ़ाइल सामग्री को बदलता है, तो आपकी प्रति अब काम नहीं कर सकती है।

लेखक rickchristianson


2
अपने स्वयं के उत्तर का सटीक डुप्लिकेट: stackoverflow.com/questions/6858492/… । डुप्लिकेट उत्तर पोस्ट करना बंद करो!
परेश मेयानी

एक ही जवाब के साथ समस्या को हल किया जा सकता है;) इसके स्पैम ??
गूसर्ड

3
लोड बैलेंसर के पीछे एक उदाहरण में ssh-ing और समायोजन करना Elastic Beanstalk के उद्देश्य को पराजित करता है। जब आप बड़े होते हैं और अधिक उदाहरण मिलते हैं तो क्या होता है? उन सभी पर यह करो? मैन्युअल रूप से?
fivedogit

1
@fivedogit यदि आप ध्यान से पढ़ते हैं, तो आप ध्यान दें कि उन्होंने उदाहरण में SSH-ing द्वारा समायोजन नहीं किया। वह केवल एसएसएच फाइल को पढ़ता है और उसे कॉपी करता है। उसके बाद, वह .ebextensionsअपनी तैनाती में उपयोग कर रहा है ताकि खुद को लोचदार बीनस्टॉक के माध्यम से समायोजन सही ढंग से किया जा सके, इसलिए वह अपने उद्देश्य को नहीं हरा रहा है।
ADTC
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.