我刚刚从 nginx 1.4.1 升级到 1.8.0(同时升级到 Phusion Passenger 5.0.13)。进行此更改后,$scheme
我们的配置中的变量似乎不再被设置。
nginx 配置如下所示:
server {
listen 80;
listen 443;
ssl on;
server_name app.example.com;
passenger_enabled on;
passenger_env_var HTTP_X_FORWARDED_PROTO $scheme;
proxy_set_header X-Forwarded-Proto $scheme;
...
}
当我检查request.env['HTTP_X_FORWARDED_PROTO']
或request.headers['X-Forwarded-Proto']
在 Rails 应用程序中时,我得到的是文字“$scheme”,而不是“http”或“https”。
我已尝试过两种proxy_set_header
方法,passenger_set_header
结果相同。
答案1
这个问题是因为我设置了环境变量和标题。删除此行解决了此问题:
passenger_env_var HTTP_X_FORWARDED_PROTO $scheme;
passenger_env_var
这是因为应用程序的开始而不是每次请求时都设置。因为$scheme
当时没有定义,所以它被设置在那里。
我不知道为什么标题也是预设的,但我怀疑这与 Passenger 尝试同步标题和环境变量以模拟 CGI 环境有关。