我刚刚从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_header和passenger_set_header并有相同的结果。
这个问题在于我设置了环境variables以及头部。 删除这条线固定这个:
passenger_env_var HTTP_X_FORWARDED_PROTO $scheme;
这是由于passenger_env_var是在应用程序的开始而不是在每个请求上进行评估的 。 因为$scheme在当时没有定义,所以在那里设置。
我不知道为什么标题也是预先设定的,但是我猜测它和Passenger试图同步标题和环境variables来模仿一个CGI环境有关。