Нежелательные HTTPS → перенаправления HTTP с помощью приложения nginx + uwsgi + flask
У меня есть приложение flask, размещенное uwsgi, с nginx в качестве обратного прокси-сервера для uwsgi, используя встроенный модуль uwsgi proxy. Всякий раз, когда я посещаю страницу, которая перенаправляется на другую страницу, заголовок Location указывает на URL-адрес, отличный от HTTPS. Например:
$ socat openssl:my-web-server:443 stdio
GET / HTTP/1.0
Host: my-web-server
HTTP/1.1 302 FOUND
Server: nginx/1.0.4
[...]
Location: http://my-web-server/login
Моя конфигурация nginx выглядит следующим образом:
server {
listen 80;
listen 443 ssl;
server_name my-web-server;
charset utf-8;
ssl_certificate /etc/nginx/certs/server.pem;
ssl_certificate_key /etc/nginx/certs/server.key;
location / {
uwsgi_pass unix:/tmp/uwsgi.sock;
include uwsgi_params;
}
}
Ответы
Ответ 1
uwsgi необходимо передать схему (http или https), используемую для обслуживания запроса, чтобы написать правильный заголовок местоположения.
По умолчанию набор параметров устанавливается в файле /etc/nginx/uwsgi_params
. Строка include uwsgi_params;
в файле конфигурации - это то, что загружает их.
По какой-то причине схема не является одной из этих настроек по умолчанию. Это можно исправить добавлением:
uwsgi_param UWSGI_SCHEME $scheme;
в конфигурацию nginx после строки include uwsgi_params;
или путем непосредственного добавления в файл /etc/nginx/uwsgi_params
.