1

我通过负载均衡器获取 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 请求,我应该添加什么?

4

2 回答 2

4

所以proxy_set_header不被passenger使用,你需要使用passenger_set_cgi_param来代替:

passenger_set_cgi_param HTTP_X_FORWARDED_PROTO https;
于 2013-05-08T15:04:01.403 回答
-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;
于 2015-06-05T22:45:49.620 回答