2015-11-03 5 views
5

मैं जिस विशिष्ट परिदृश्य से निपट रहा हूं वह एक एडब्लूएस लोचदार लोड बैलेंसर के पीछे एक वेबसाइकिल कनेक्शन से कनेक्ट करने का प्रयास कर रहा है, जबकि http/tcp के बजाय https/ssl को लागू करता है।मैं कैसे पता लगा सकता हूं कि एक एसएसएल कनेक्शन से एक टीसीपी कनेक्शन अग्रेषित किया गया है?

http/s से टीसीपी/एसएसएल अपग्रेड को सक्षम करने के लिए, लोड बैलेंसर पर प्रोटोकॉल को 443 पर HTTPS की बजाय पोर्ट 80 और एसएसएल पर HTTP के बजाय टीसीपी पर सेट किया गया है, जिनमें से दोनों को उदाहरण पर भेजा जाता है टीसीपी का उपयोग कर 80 का बंदरगाह।

Amazon Elastic load balancer is not populating x-forwarded-proto header

यह किसी भी आने वाले अनुरोधों 301ing की अगली चुनौती बनाता है:

हालांकि, टीसीपी/एसएसएल के लिए प्रोटोकॉल स्थापित करने का एक पक्ष प्रभाव नहीं रह गया है x-forwarded-proto हैडर सेट हो जाता है कि, जैसा कि यहाँ का अनुभव है एचटीएमएल/एसएसएल को कुछ हद तक समस्याग्रस्त करने के लिए http/tcp का उपयोग करना, क्योंकि यह आम तौर पर x-forwarded-proto शीर्षलेख का निरीक्षण करने पर निर्भर करता है।

स्थिति के विनिर्देशों पर थोड़ा और विवरण: इसमें एक उल्का.जेएस प्रक्रिया के साथ एक डॉकर कंटेनर मौजूद है, जो एक एडब्लूएस लोचदार बीनस्टॉक एप्लिकेशन के भीतर बदले में रहता है (जिसमें डिफ़ॉल्ट रूप से एक निजिनक्स प्रॉक्सी परत है , लेकिन यह डॉकर के उपयोग के कारण सुलभ नहीं है जो डॉकर हब से कंटेनर परिभाषा खींचता है), जो उपर्युक्त ईएलबी के पीछे बैठता है।

आखिरकार मुझे हेडर का निरीक्षण करना छोड़ दिया गया है कि जब तक मैं ईएलबी, नग्गीक्स और डॉकर एजेंट परतों के माध्यम से अनुरोध चला गया हूं, तब तक मेरे आवेदन के लिए उपलब्ध है, क्लाइंट द्वारा किए गए मूल अनुरोध के साथ काम करने की कोशिश कर रहा है http या https

आने वाली https:// अनुरोध हेडर:

{ 
    host: 'whatever.elasticbeanstalk.com', 
    'x-real-ip': '999.99.99.99', 
    'x-forwarded-for': '999.99.99.99', 
    'cache-control': 'max-age=0', 
    accept: 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8', 
    'upgrade-insecure-requests': '1', 
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', 
    'accept-encoding': 'gzip, deflate, sdch', 
    'accept-language': 'en-US,en;q=0.8' 
} 

आने वाली http:// अनुरोध हेडर:

{ 
    host: 'whatever.elasticbeanstalk.com', 
    'x-real-ip': '999.99.99.99', 
    'x-forwarded-for': '999.99.99.99', 
    'cache-control': 'max-age=0', 
    accept: 'image/webp,image/*,*/*;q=0.8', 
    'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36', 
    'accept-encoding': 'gzip, deflate, sdch', 
    'accept-language': 'en-US,en;q=0.8', 
    'if-none-match': '"141699-1446507991000"', 
    'if-modified-since': 'Mon, 02 Nov 2015 23:46:31 GMT' 
} 

इन कि थोड़ा उपयोगी लग रहा है की केवल एक ही upgrade-insecure-requests हैडर है, लेकिन इस

What is the "Upgrade-Insecure-Requests" HTTP header?

के आधार पर मैं यकीन है कि यह नहीं है हूँ।

शायद मैं कुछ याद कर रहा हूँ लेकिन ...

उत्तर

3

सवाल वास्तव में (वास्तव में के रूप में यह पता चला यह मैं क्या मतलब है) "मैं http के माध्यम से मेरी वेबसाइट HTTPS/SSL पर भेज दिया जाएगा पर जाकर किसी को भी सुनिश्चित कर सकते हैं" है, तो इस

द्वारा संभव है
  1. उदाहरण पर 80 पर HTTP पर 80 से HTTP पर HTTP को आगे बढ़ाने के लिए लोचदार लोड बैलेंसर सेट करना (उदाहरण के लिए 80 पर टीसीपी की बजाय 80) और फिर 443 पर एचटीटीपीएस को 80 पर टीसीपी पर अग्रेषित करें।

  2. प्रोटोकॉल की पहचान के दौरान "एचटीटीपीएस/एसएसएल मानते हुए": अर्थात् जांच करें कि x-forwarded-proto मौजूद है, यदि ऐसा होता है, तो यह http अनुरोध से आता है, इस प्रकार 301 से https। यदि कोई अस्तित्व में नहीं है, तो इसे https मानें, इसे रीडायरेक्ट न करें (अभ्यास में मुझे लगा कि मैं यह सुनिश्चित करने के लिए भी जांच कर सकता हूं कि प्रोटोकॉल रीडायरेक्ट करने से पहले http था, लेकिन वर्तमान सेट अप में मुझे पूरा यकीन है कि यह एकमात्र परिदृश्य है जो संभवतः हो सकता है)।

+2

अच्छा समाधान जोशुआ आज रात इसी तरह की कॉन्फ़िगरेशन के साथ लड़ रहा है। इसे आज़माएं, धन्यवाद! – boom

+1

काम करता है, यह इस समस्या का एक बहुत ही सरल चालाक समाधान है। हर कोई अन्य समाधान प्रॉक्सी और कॉन्फ़िगरेशन की परतों पर निर्भर था। इसे साझा करने के लिए फिर से धन्यवाद। – boom

+0

@ जोशुआ अगर मैं 80 पर टीसीपी को एचटीटीपीएस अग्रेषित करता हूं, तो वेबसाईट काम करेगा? या यह सिर्फ लंबे मतदान के लिए गिर जाएगी? –

3

जब आप TCP का उपयोग, ईएलबी इस तरह के एक्स-अग्रेषित-आद्य या एक्स-अग्रेषित-के लिए के रूप में HTTP हेडर इंजेक्षन नहीं होंगे। configuring Proxy Protocol द्वारा आपको जो चाहिए वह प्राप्त करने में सक्षम हो सकता है।

+0

अच्छा विचार है, धन्यवाद, लेकिन दुर्भाग्य से यह मेरे उदाहरण के सामने nginx उदाहरण प्रतीत होता है इस तरह के एक सेटिंग प्राप्त करने के लिए कॉन्फ़िगर नहीं है और जब यह लॉग में ठीक दिखाई देता है, किसी भी अनुरोध एक 400 त्रुटि देता है सीधे, nginx से – Joshua

+0

क्या आप nginx को फिर से कॉन्फ़िगर कर सकते हैं? या शायद तस्वीर से ईएलबी को हटाने पर विचार करें और अपना स्वयं का एलबी और एसएसएल समाप्ति करें। – jarmod

+0

हाँ शायद, लेकिन मैं नहीं चाहता: आधा कारण मैंने लोचदार बीनस्टॉक को nginx जैसी चीजों का प्रबंधन नहीं करना था। बाहर निकलता है मुझे मूल रूप से समस्या को अनदेखा करने का तरीका मिला (नीचे देखें) – Joshua

संबंधित मुद्दे

 संबंधित मुद्दे