我已經使用Capistrano,nginx/ Passenger和通配符SSL證書將我的應用部署到Ubuntu VPS。Rails在生產中設計SSL會話混合
該應用在開發和我的舞臺環境 Heroku上正常工作。
但是,當用戶使用安全頁面登錄到 網站時,生產存在兩個問題。
在最新的Chrome和Firefox瀏覽器開始執行HTTPS對每一個請求,每次請求 。無論用戶是否登錄到 。即使我在nginx上禁用了SSL,瀏覽器仍會嘗試HTTPS,並抱怨它無法連接。主頁面提供一些不安全的動態嵌入 項目並使用不安全的CDN,因此我想將該頁面作爲非 SSL提供。每當我嘗試通過 nginx重寫或Rails中的before過濾器將頁面重定向到非SSL時,它將導致無限的 重定向循環。
Safari不具備上述第一個問題,它同時兼顧了 HTTPS和HTTP請求。但是,當用戶登錄並且 瀏覽到非SSL頁面時,它們即刻退出或丟失會話 。
有沒有人遇到過這樣的問題,或者對如何診斷/解決問題有想法?
感謝
你說得對hsts問題是正確的。我使用的是Rails 3.1,但我沒有使用'force_ssl',而是使用gem'rack-ssl',需要:'rack/ssl''和'config.middleware.insert_before Rack :: Lock,Rack :: SSL,:exclude => proc {| env | env ['HTTPS']!='on'}'在生產配置中。但是,我仍然無法解決登錄會話問題。我已經檢查了cookie_options,並且沒有爲Rails或Devise設置':secure => true'。 – davicta 2012-01-03 18:48:39
看起來像Rack :: SSL默認情況下會將cookie設置爲安全。這怎麼影響我的服務器上的應用程序,但不影響Heroku?另外你怎麼能夠使用Rack :: SSL禁用安全cookie? – davicta 2012-01-03 19:19:37
我不能說Heroku,因爲我沒有經驗。 它看起來像你不能禁用rack-ssl中的安全cookie標記,一個選項是monkeypatch它來停止運行'flag_cookies_as_secure'。 你也可以使用rack-ssl-enforcer gem代替https://github.com/tobmatth/rack-ssl-enforcer/blob/master/lib/rack/ssl-enforcer.rb#L37,它有一個選項啓用安全cookie。 – 2012-01-03 19:46:04