我在nginx代理后面的独立Passenger上提供了一个Rails应用程序。由于这种设置,环境哈希需要稍微调整才能使用我们正在使用的机架中间件(rack-cas)。具体来说,我必须在中间件的调用方法中设置env['SERVER_PORT'] = '443'
和env['HTTPS'] = 'on'
(我们不希望Passenger使用SSL,宁愿nginx代理处理它)。
我可以在中间件中做到这一切,但是我可以在Rails应用程序中做到这一点,所以我不必自定义中间件吗?
答案 0 :(得分:0)
事实证明,这一切都可以通过nginx代理的配置完成,根本不必触摸应用程序或中间件:
location /foo/ {
proxy_pass http://0.0.0.0:SOME_PORT/foo/;
proxy_buffering off;
proxy_http_version 1.1;
proxy_set_header Connection $connection_upgrade;
proxy_set_header Host $host; # more robust than http_host
proxy_set_header Upgrade $http_upgrade;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # this ensures your app's env is correct
proxy_set_header X-Forwarded-Host $host;
proxy_set_header X-Forwarded-Proto https; # add this if you always want the redirects to go to HTTPS
}