nginx没有定义$ scheme

我刚刚从nginx 1.4.1升级到1.8.0(随着升级到Phusion Passenger 5.0.13)。 随着这种改变,我们configuration中的$schemevariables不再被设置。

nginxconfiguration看起来像这样:

 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; ... } 

当我检查Rails应用程序中的request.env['HTTP_X_FORWARDED_PROTO']request.headers['X-Forwarded-Proto']时,我得到了文字“$ scheme”,而不是“http”或“https”。

我已经尝试了proxy_set_headerpassenger_set_header并有相同的结果。

这个问题在于我设置了环境variables以及头部。 删除这条线固定这个:

 passenger_env_var HTTP_X_FORWARDED_PROTO $scheme; 

这是由于passenger_env_var是在应用程序的开始而不是在每个请求上进行评估的 。 因为$scheme在当时没有定义,所以在那里设置。

我不知道为什么标题也是预先设定的,但是我猜测它和Passenger试图同步标题和环境variables来模仿一个CGI环境有关。