ruby-on-rails - 为什么 ActionDispatch::Request.original_url 返回错误的方案?

标签 ruby-on-rails ssl nginx unicorn

我有一个 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/

相关文章:

amazon-web-services - 使用 Ingress 的 Kubernetes 上的 s3 代理

nginx - 反向代理不使用 nginx 和 kubernetes 路由到 API

ruby-on-rails - 使用地理编码器 gem 进行验证

ruby-on-rails - 如何使用 vim 和控制台使用 oneliner 命令打开 gem 库

javascript - 代码编辑器 API(带有行号)和代码高亮器

ssl - puppet 企业 ssl 证书错误

ios - 通过 SSL 的 Swift 授权 header

ruby-on-rails - 当 Memcachier 达到缓存限制时,Heroku 请求超时

ruby-on-rails - 为 Heroku 域指定 SSL 端点

NGINX 不等于