不需要的HTTPS - >使用nginx + uwsgi + flask app重定向HTTP

Joe*_*haw 20 https redirect http nginx uwsgi

我有一个烧瓶应用程序,由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
Run Code Online (Sandbox Code Playgroud)

我的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

Joe*_*haw 28

uwsgi需要传递用于提供请求的方案(http或https)才能写出正确的Location头.

默认情况下,/etc/nginx/uwsgi_params文件中会设置一组设置.include uwsgi_params;配置文件中的行是加载它们的.

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

uwsgi_param UWSGI_SCHEME $scheme;
Run Code Online (Sandbox Code Playgroud)

include uwsgi_params;在行之后的nginx配置,或/etc/nginx/uwsgi_params直接将其添加到文件中.