我已经使用Capistrano,nginx / Passenger和通配符SSL证书将应用程序部署到了Ubuntu VPS。
该应用程序在Heroku上的开发环境和我的暂存环境中均可正常运行。
但是,当用户使用安全页面登录站点时,生产中存在两个问题。
在最新的Chrome和Firefox上,浏览器每次都开始对每个单个请求强制执行HTTPS请求。 无论用户是否登录。 即使我在nginx上禁用了SSL,浏览器仍会尝试HTTPS并抱怨无法连接。 主页提供了一些不安全的动态嵌入项目,并使用了不安全的CDN,因此我希望将该页面作为非SSL服务。 每当我尝试通过nginx重写或Rails中的before过滤器将页面重定向到非SSL时,都会导致无限重定向循环。
Safari没有上述第一个问题,它同时尊重HTTPS和HTTP请求。 但是,当用户登录并浏览到非SSL页面时,他们将注销或立即丢失会话。
有没有人以前遇到过这样的问题,或者对如何诊断/解决问题有任何想法?
谢谢
您是否在使用Rails 3.1 force_ssl
启用SSL或gem?
启用HTTPS时,还启用了HTTP Strict Transport Security标志,浏览器可使用该标志在将请求发送到服务器之前立即转到该域上的任何HTTPS页面。
在Chrome上,在浏览器中输入chrome://net-internals/#hsts
,然后您可以从HSTS列表中删除您的域,该域应针对Chrome进行修复。 不能代表Firefox,因为我不经常使用它。
会话丢失的问题很可能是因为Rails将身份验证cookie设置为安全的,这意味着它们仅针对HTTPS请求而非HTTP发送。 确保您在Rails中的cookie_options
没有设置:secure => true
。 还要检查Devise cookie_options
设置,以确保cookie_options
设置:secure => true
。