我有一个 Ruby on Rails 应用程序,它在模板中包含以下内容...
<form action="<%= request.original_url %>" method="post">
当我通过 https 请求页面时,我最终得到一个与原始请求具有完全相同 url 的表单操作,但不是 https://
它被生成为 http://
,导致混合内容错误。
我错过了什么?什么情况下会request.original_url
返回错误的方案?
我正在使用 Unicorn 和 nginx 运行 Ruby on Rails。
最佳答案
看起来这可能是问题的解决方案:
http://blog.seancarpenter.net/2013/09/02/rails-ssl-route-generation-with-nginx-and-unicorn/
因为站点在 nginx 中运行,nginx 正在终止 SSL,而 Rails 不知道是这种情况。
要将此信息传递给 Rails,需要设置 nginx 配置,以便在将请求转发到应用服务器时添加 X-Forwarded-Proto https
header 。
上述文章中的示例配置显示...
位置@app {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto https; # SSL 的新 header
proxy_set_header 主机 $http_host;
proxy_redirect 关闭;
proxy_pass http://unicorn_something_server;
}
关于ruby-on-rails - 为什么 ActionDispatch::Request.original_url 返回错误的方案?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31171174/