我需要为我的 Rails 应用程序进行一些特殊设置。我的应用程序托管在反向代理后面,出于某种原因它正在重写请求。应用程序运行的服务器只有一个内部 IP 地址。反向代理具有公共(public)地址并将所有传入请求重定向到应用服务器。
问题是,虽然所有请求都是 example.com/my/url
它们正在被重写并作为 10.0.0.2/my/url
发送到应用服务器.这成为一个问题,例如。设计通过要求身份验证和重定向到登录页面来发挥作用。发送的重定向将包括本地 IP 地址,而不是最初请求的 FQDN。
知道如何告诉我的 Rails 应用程序在重定向中使用特定的主机名吗?我试过设置 HTTP_HOST
使用 passenger_set_cgi_param
这没有用,还尝试手动设置 request.host
在before_filter
.
最佳答案
我认为您需要让反向代理将关键的 HTTP header 转发到您的 Rails 应用程序。听起来这些都被剥离了。
对于 nginx,我的 server
block 中有这些指令:
server {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header Host $http_host;
proxy_redirect off;
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;
}
关于ruby-on-rails - 使用 Devise 在 Rails 中更改主机名以进行重定向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8869268/