ein*_*ent 1 security cookies ssl ruby-on-rails nginx
我正在使用位于反向代理服务器(Nginx)后面的Rails应用程序,我需要标记Rails应用程序的会话cookie Secure.但是,当我设置如下,
Application.config.session_store :cookie_store, :key => '_app_session', :secure => true
Rails停止发送_app_sessioncookie.
我知道Rails正在阻止它,因为我正在直接使用Rails curl -v,_app_session当我省略时我可以看到cookie :secure => true.
如何强制Rails通过HTTP连接发送安全cookie?
注意:在这种特定情况下,通过HTTP发送安全cookie是可以的.这种流量发生在被认为是安全的区域,然后被包装在SSL中并发送到世界各地.此外," 在上游终止SSL很常见 ",所以我不是第一个有这样设置的人.
这是我已经尝试过的:
我在Lua中写了一个脚本,它添加Secure了cookie.它有效,但我的老板说我们不能在Nginx中拥有Lua.
我无法弄清楚如何在Nginx中使用以下指令来实现我想要的:
我尝试添加set_proxy_header并add_header按照此处的建议,但它不起作用,我怀疑我们的设置有一些特殊的东西可能导致这种情况.
最后,假设我可以为Nginx编写一个C模块,但我不打算这样做.
我将以下内容添加到location我的Nginx conf文件中的相关块中:
proxy_set_header        X-Forwarded-Proto https;
它之前没有用X-Forwarded-Proto $scheme,因为我在我的问题中使用了链接的建议.我不知道为什么那不起作用,而是在做
$ curl -v -H "X-Forwarded-Proto: https" http://localhost:95/app-path
确实返回了预期的_app_sessioncookie,并Secure设置了标志,所以很明显RoR只需要知道安全cookie最终将通过https结束.
更新(2015年6月)
我遇到这个问题的原因是因为我们的服务器是代理传递http请求给自己https而不是X-Forwarded-Proto先设置.一旦我更好地理解了拓扑结构,我就可以X-Forwarded-Proto $scheme在第一次代理通过之前完成.这是正确的解决方案.
| 归档时间: | 
 | 
| 查看次数: | 2707 次 | 
| 最近记录: |