我已经使用 Capistrano、nginx/将我的应用程序部署到 Ubuntu VPS 乘客和通配符 SSL 证书。
该应用程序在开发和我的暂存环境上运行良好 Heroku。
但是,当用户登录时,在生产环境中存在两个问题 使用安全页面的网站。
在最新的 Chrome 和 Firefox 上,浏览器开始强制执行 HTTPS 每次请求每个请求。不管用户是否 登录与否。即使我在 nginx 上禁用 SSL,浏览器仍会尝试 HTTPS 并提示它无法连接。主页提供一些不安全的动态嵌入 项目并使用不安全的 CDN,所以我想将该页面作为非 SSL。每当我尝试通过以下方式将页面重定向到非 SSL 时 nginx 重写或 Rails 中的前过滤器会导致无限 重定向循环。
Safari 没有第一个问题,因为它尊重这两个问题 HTTPS 和 HTTP 请求。但是,当用户登录并 浏览到非 SSL 页面 他们已注销或失去 session 立即。
有没有人以前遇到过这样的问题,或者对我如何诊断/解决问题有想法?
谢谢
最佳答案
您是使用 Rails 3.1 force_ssl
来启用 SSL 还是 gem?
启用 HTTPS 时,您还启用了 HTTP Strict Transport Security标志,浏览器使用它在将请求发送到服务器之前立即转到该域上的任何 HTTPS 页面。
在 Chrome 上,在您的浏览器中输入 chrome://net-internals/#hsts
然后您可以从 HSTS 列表中删除您的域,这应该会为 Chrome 修复它。不能代表 Firefox,因为我不经常使用它。
丢失 session 的问题很可能是因为 Rails 将身份验证 cookie 设置为安全的,这意味着它们只针对 HTTPS 请求而不是 HTTP 发送。确保 Rails 中的 cookie_options
未设置 :secure => true
。还要检查 Devise cookie_options
设置以确保未设置 :secure => true
。
关于ruby-on-rails - Rails Devise SSL session 在生产环境中混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8704598/