(https)Nginx - > (HTTP)播放!但是request.secure是假的

时间:2011-06-13 01:22:45

标签: nginx playframework

在Play前配置Nginx作为反向代理!并传递https 设置以下标题: -

        proxy_set_header   X-Forwarded-Proto https; 
        proxy_set_header   X-Forwarded-Ssl https; 

login() [https://localhost/login]正在转发给Play!在港口 9000为'http'。但是login()中的request.secure仍然是'false'。任何的想法 ?

更新: 这是服务器conf: -

server {
    listen                443;
    server_name           localhost;

    ssl                   on;
    ssl_certificate       /home/aymer/play/key/localhost.crt;
    ssl_certificate_key   /home/aymer/play/key/localhost.key;
    ssl_session_timeout   5m;

    location ~ ^/(images|javascript|js|css|flash|media|static)/  {
            root    /home/aymer/play/playapp/public;
            expires 30d;
    }

    location ~* (login|register)$ { 
            proxy_pass         http://localhost:9000;
            proxy_redirect     off;

            proxy_set_header   Host               $host;
            proxy_set_header   X-Real-IP          $remote_addr;
            proxy_set_header   X-Forwarded-Proto  https;
            proxy_set_header   X-Forwarded-Ssl    on;
        }

    location / {
        rewrite ^/(.*) http://$host/$1 permanent;
    }
}

3 个答案:

答案 0 :(得分:7)

第二个条目错了,应该是:

proxy_set_header   X-Forwarded-Ssl on; 

这将解决问题

更新:无法测试,我唯一看到的是这个标题:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

除此之外,一切似乎都是正确的。

答案 1 :(得分:3)

只是为了说清楚。我讨论了这个问题,并且有一段时间难以拥有完整的工作解决方案。

要使其正常工作,您的nginx配置必须包含:

proxy_set_header   X-Forwarded-Ssl    on;
proxy_set_header   X-Forwarded-For    $proxy_add_x_forwarded_for;

参数

proxy_set_header   X-Forwarded-Proto  https;

没用(对于这个用例)。

但您还需要在application.conf中指定:

XForwardedSupport=<proxy server address> # generally, 127.0.0.1

这个答案只是对Pere Villega和Aymer之间整个对话的回顾。

答案 2 :(得分:1)

我想解决方案是改变:

"proxy_redirect     off;" 

进入

"proxy_redirect     http://localhost https://localhost;"

"localhost"是server_name的值。