मेरी nginx.conf में सर्वर घोषणा:प्रॉक्सी के पीछे रेल ऐप के लिए https पुनर्निर्देशन?
listen 1.2.3.4:443 ssl;
root /var/www/myapp/current/public;
ssl on;
ssl_certificate /etc/nginx-cert/server.crt;
ssl_certificate_key /etc/nginx-cert/server.key;
location/{
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_redirect off;
if (!-f $request_filename) {
proxy_pass http://upstreamy;
break;
}
}
nginx.conf में नदी के ऊपर घोषणा:
upstream upstreamy {
server unix:/var/www//myapp/shared/sockets/unicorn.sock fail_timeout=0;
}
इस ठीक काम करता है, MyApp https://somehost
के रूप में पहुंचा जा सकता है लेकिन एप्लिकेशन पैदा कर रहा है http यूआरएल रीडायरेक्ट के लिए है, इसलिए उदाहरण के लिए जब devise के साथ प्रमाणीकरण किया जाता है,/https के बजाय http://somehost/user/sign_in पर रीडायरेक्ट किया जाता है (रेल ऐप के दृष्टिकोण से, यह सभी http वैसे भी है)।
मैं
proxy_pass https://upstreamy;
कोशिश की, लेकिन है कि बस nginx और इकसिंगों कि रेल अनुप्रयोग चलाने के बीच यातायात को एनक्रिप्ट करने की कोशिश करता है।
मैं भी कोशिश की application_helper.rb में:
# http://stackoverflow.com/questions/1662262/rails-redirect-with-https
def url_options
super
@_url_options.dup.tap do |options|
options[:protocol] = Rails.env.production? ? "https://" : "http://"
options.freeze
end
लेकिन यह काम नहीं हो रहा है।
कोई इसे कैसे हल करेगा?
संपादित करें: इसलिए, लक्ष्य रेल ऐप को एसएसएल की आवश्यकता नहीं है, या एसएसएल का उपयोग करने के लिए मजबूर होना है; लक्ष्य रेल ऐप को https: // urls को पुनर्निर्देशित करते समय उत्पन्न करना है ... (मुझे लगता है कि अन्य सभी यूआरएल रिश्तेदार हैं)।
धन्यवाद, कि पूरी तरह से काम करता है! –
बहुत बढ़िया! Nginx सेट अप बहुत दर्दनाक हो सकता है। बहुत दर्दनाक ... :) –
मैं proxy_set_header का उपयोग नहीं कर सका, लेकिन मैंने बस "पोस्ट" विधि के लिए अपनी प्रॉक्सी में सब कुछ अग्रेषित किया और प्राप्त करने के लिए यूआरएल को फिर से लिखना। अभी तक बहुत अच्छी तरह से काम कर रहे हैं। – nembleton