(https) Nginx -> (http) Играть !.Но request.secure является ложным - PullRequest
13 голосов
/ 13 июня 2011

Настроил Nginx в качестве обратного прокси перед Play!и передача https со следующими установленными заголовками: -

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

login() [https://localhost/login] пересылается в Play!на порт 9000 как «http».Но request.secure в login () по-прежнему равен 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 ]

7 голосов
/ 13 июня 2011

вторая запись неверна, она должна быть:

proxy_set_header   X-Forwarded-Ssl on; 

Это решит проблему

ОБНОВЛЕНИЕ: без возможности тестирования, единственное, что я пропускаю, это заголовок:

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

Кроме того, все кажется правильным.

3 голосов
/ 03 февраля 2012

Просто чтобы прояснить ситуацию. Я столкнулся с этой проблемой, и мне было трудно найти готовое решение.

Чтобы это работало, ваша конфигурация 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

Этот ответ является лишь кратким изложением всего разговора между Пере Виллегой и Аймером.

1 голос
/ 30 ноября 2011

Я думаю, что решение было бы изменить:

"proxy_redirect     off;" 

на

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

"localhost", являющееся значением для имени_сервера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...