2011-12-14 13 views
6

मैं हेरोकू पर एक ऐप तैनात कर रहा हूं और यह निर्धारित करने की कोशिश कर रहा हूं कि अनुरोध में आने वाला अनुरोध सुरक्षित है (request.secure)। यह शुरुआत में उसकेोकू पर झूठा लौट रहा है क्योंकि nginx एसएसएल काम को संभालता है और ऐप सर्वर पर सादा http पर संचार करता है। तो जाने के लिए खेलने हेडर है कि है पता है कि यह एक सुरक्षित अनुरोध मैं जोड़ने है पढ़ें:https प्ले के लिए XForwardedSupport! Heroku पर समर्थन

XForwardedSupport = 127.0.0.1

के रूप में खेलने के संदेश बोर्डों में सिफारिश की application.conf करने के लिए। हालांकि, फिर सभी अनुरोध (छवियों को छोड़कर) कोई त्रुटि के साथ विफल। ऐसा लगता है कि यह प्ले लॉग को हिट करने से पहले कुछ मौलिक हो रहा है। क्या किसी ने इसका अनुभव किया है?

+0

साथ शिकायत कर बंद हो जाता है जब आप application.conf

XForwardedSupport=all 

में इस सेट मुझे लगता है क्योंकि जिस तरह से Heroku मार्ग का प्रबंधन करता है मुद्दा है। एक सपोर्ट टिकट बनाएं, वे वास्तव में त्वरित उत्तर दे रहे हैं और मैं वास्तव में खुश हूं कि वे मुद्दों को कितनी अच्छी तरह हल करते हैं। –

+0

करेगा, मैं किसी भी संकल्प के साथ यहां वापस पोस्ट करूंगा। –

उत्तर

6

मुझे नहीं लगता कि Play XForwardedSupport कॉन्फ़िगरेशन पैरामीटर के माध्यम से हेरोोक पर अनुरोधों को अग्रेषित (प्रॉक्सी) के तरीके का समर्थन करता है। उसे हेरोकू लोड बैलेंसर के पते पर सेट करने की आवश्यकता होगी और उस प्री-रनटाइम को कॉन्फ़िगर करने का कोई तरीका नहीं है। इसके बजाय, आपको यह निर्धारित करने के लिए x-forwarded-proto अनुरोध शीर्षलेख को देखना चाहिए कि हेर्कू लोड बैलेंसर का अनुरोध http या https के माध्यम से था या नहीं। शायद कुछ ऐसा हो सकता है:

Boolean secure = false; 
    if (request.headers.get("x-forwarded-proto") != null) { 
     secure = request.headers.get("x-forwarded-proto").values.contains("https"); 
    } 
    System.out.println("secure = " + secure); 

बीटीडब्ल्यू: हेरोकू का देवदार ढेर Nginx का उपयोग नहीं करता है। यह MochiWeb, एक एरलांग-आधारित वेब सर्वर का उपयोग करता है।

+0

यह निश्चित रूप से समस्या है, जैसा कि एक heroku समर्थन इंजीनियर द्वारा पुष्टि की गई है। मुझे चिंता है कि अगर खेल नहीं जानता है कि अनुरोध सुरक्षित है तो यह डिफ़ॉल्ट रूप से गैर-एसएसएल यूआरएल पर रीडायरेक्ट करने की तरह चीजें करेगा और इस तरह की चीजें। वैसे भी, मैं इसे आज़मा दूंगा और देख सकता हूं कि और क्या गलत हो गया है और रिपोर्ट करें। धन्यवाद! –

+1

इस समाधान पर अभी तक इतना अच्छा है! कुछ एनोटेटेड हैंडलर के लिए मैं एसएसएल पर एक रीडायरेक्ट को मजबूर कर रहा हूं ताकि कार्रवाई नियमित http पर कभी नहीं देखी जा सके। यदि कोई दिलचस्पी लेता है तो मैं कुछ कोड पोस्ट करूंगा कि यह कैसे किया जाता है, हम इसे वास्तव में उपयोगी पाते हैं (अब यह है कि यह फिक्स उसकेोकू के लिए काम करता है)। –

+0

मैंने अपस्ट्रीम प्ले कोड में इसे और अधिक उपयोगी बनाने के बारे में कुछ विचार जोड़े हैं। मुझे इस टिकट में अधिक लोगों से सुनने में दिलचस्पी होगी: [बग # 1406] चलाएं (https://play.lighthouseapp.com/projects/57987/tickets/1406-play-123-124-playmvcrouter-does-not -Fully-support-प्रॉक्सी-ssl # टिकट 1406-4) –

3

thnx बड़ा समय! आपने Heroku + play के साथ संघर्ष के घंटे बचाए! मैं पुष्टि कर सकता है कि Heroku SIGTERM