आदेश सिनात्रा सही ढंग से रीडायरेक्ट के लिए इस्तेमाल किया यूआरएल इकट्ठा करने के लिए के लिए में भी है करने के लिए अच्छा है, यह करने में सक्षम होने की जरूरत है यह निर्धारित करें कि अनुरोध एसएसएल का उपयोग कर रहा है, ताकि रीडायरेक्ट http
या https
का उपयोग उचित रूप से किया जा सके।
जाहिर है पतली करने के लिए वास्तविक कॉल SSL का उपयोग नहीं किया जाता है, के रूप में यह सामने अंत वेब सर्वर द्वारा संभाला जा रहा है, और उसे प्रॉक्सी अनुरोध स्पष्ट है। इसलिए हमें सिनात्रा को बताने का एक तरीका चाहिए कि इसे अनुरोध को सुरक्षित के रूप में देखना चाहिए, भले ही यह वास्तव में एसएसएल का उपयोग नहीं कर रहा हो।
आखिरकार वह कोड जो निर्धारित करता है कि अनुरोध को सुरक्षित के रूप में माना जाना चाहिए Rack::Request#ssl?
और Rack::Request#scheme
विधियों में है। scheme
विधियों को देखने के लिए env
हैश की जांच करता है कि कितने प्रविष्टियां मौजूद हैं। इनमें से एक HTTP_X_FORWARDED_PROTO
है जो X-Forwarded-Proto
HTTP शीर्षलेख से मेल खाता है। यदि यह सेट किया गया है, तो मान प्रोटोकॉल योजना (http
या https
) के रूप में उपयोग किया जाता है।
इसलिए यदि हम इस HTTP शीर्षलेख को अनुरोध पर जोड़ते हैं तो यह nginx से पीछे के अंत तक प्रॉक्सी हो जाता है, तो सिनात्रा सही ढंग से निर्धारित करने में सक्षम होगा कि https
पर रीडायरेक्ट करना कब होगा। Nginx में हम proxy_set_header
के साथ प्रॉक्सी अनुरोधों में हेडर जोड़ सकते हैं, और यह योजना $scheme
variable में उपलब्ध है।
तो proxy_pass
पंक्ति के बाद nginx विन्यास के लिए लाइन
proxy_set_header X-Forwarded-Proto $scheme;
जोड़ने यह काम करना चाहिए।
जोड़ने 'proxy_set_header X-Forwarded-आद्य $ योजना है;' अपने 'proxy_pass' लाइन मदद के बाद? – matt
आपको इसे एक उत्तर के रूप में लिखना चाहिए ... यह मेरी समस्या को ठीक करता है। धन्यवाद! –