nginx 没有定义 $scheme

nginx 没有定义 $scheme

我刚刚从 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 环境有关。

相关内容