【发布时间】:2015-05-28 14:00:19
【问题描述】:
我正在使用位于反向代理服务器 (Nginx) 后面的 Rails 应用程序,我需要将 Rails 应用程序的会话 cookie 标记为 Secure。但是,当我像下面这样设置时,
Application.config.session_store :cookie_store, :key => '_app_session', :secure => true
Rails 停止发送 _app_session cookie。
我知道 Rails 阻止了它,因为我直接使用 curl -v 访问 Rails,当我省略 :secure => true 时,我可以看到 _app_session cookie。
如何强制 Rails 通过 HTTP 连接发送安全 cookie?
注意:在这种特定情况下,可以通过 HTTP 发送安全 cookie。此流量发生在一个被认为是安全的区域,然后才被 SSL 包裹并发送到世界各地。此外,“terminating SSL upstream is quite common”,所以我不是第一个有这种设置的人。
替代方案(什么不起作用)
这是我已经尝试过的:
我在 Lua 中编写了一个脚本,将 Secure 添加到 cookie 中。它有效,但我的老板说我们不能在 Nginx 中使用 Lua。
我不知道如何在 Nginx 中使用以下指令来实现我想要的:
- $http_header
- proxy_set_header
- more_set_headers
- $cookie_COOKIE
我尝试按照here 的建议添加set_proxy_header 和add_header,但没有奏效,我怀疑可能是我们的设置有一些特殊的原因。
最后,假设我可以为 Nginx 编写一个 C 模块,但我不会这样做。
【问题讨论】:
标签: ruby-on-rails security ssl cookies nginx