不需要的HTTPS ->HTTP重定向与nginx + uwsgi + flask应用程序



我有一个flask应用程序,由uwsgi托管,使用nginx作为uwsgi的反向代理,使用内置的uwsgi代理模块。每当我访问一个重定向到另一个页面的页面时,Location头都会指向一个非https URL。例如:

$ 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;
    }
}

uwsgi需要传递用于服务请求的方案(http或https),以便编写正确的Location头。

默认情况下,在/etc/nginx/uwsgi_params文件中设置了一堆设置。配置文件中的include uwsgi_params;行是加载这些文件的。

但是,无论出于何种原因,该方案不是这些默认设置之一。这可以通过添加:

来修复。
uwsgi_param UWSGI_SCHEME $scheme;

include uwsgi_params;行之后的nginx配置中,或者直接添加到/etc/nginx/uwsgi_params文件中。

最新更新