我通过负载均衡器获取SSL请求,该负载均衡器执行SSL终止并将解密的流量通过端口81发送到我的服务器。
我正在运行Nginx并设置了一个端口81的监听器,我想告诉我的Rails应用程序这是一个SSL请求。
以下是我的Nginx配置的样子:
server {
listen 81;
server_name SERVER;
root /var/www/app/current/public;
error_log /var/log/nginx/app-error.log;
access_log /var/log/nginx/app-access.log;
passenger_enabled on;
client_max_body_size 100M;
location / {
passenger_enabled on;
proxy_set_header X-FORWARDED-PROTO https;
}
}
它经历了但Ruby on Rails没有检测到头request.headers ['X-Forwarded-Proto'],所以它将请求作为非https。 为了让Rails认为这是一个SSL请求,我应该添加什么?
答案 0 :(得分:4)
因此乘客不使用proxy_set_header,您需要使用passenger_set_cgi_param:
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;
答案 1 :(得分:-1)
nginx指令passenger_set_cgi_param已被passenger_set_env取代。 https://www.phusionpassenger.com/documentation/Users%20guide%20Nginx.html#PassengerEnvVar
对于较新的nginx,指令应为
passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;