我有一个flask应用,由uwsgi托管,nginx作为uwsgi的反向代理,使用内置的uwsgi proxy module。每当我访问重定向到另一个页面的页面时,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;
}
}
答案 0 :(得分:28)
uwsgi需要传递用于提供请求的方案(http或https)才能写出正确的Location头。
默认情况下,/etc/nginx/uwsgi_params
文件中设置了一组设置。配置文件中的include uwsgi_params;
行是加载它们的。
无论出于何种原因,该方案不是这些默认设置之一。这可以通过添加:
来解决uwsgi_param UWSGI_SCHEME $scheme;
到include uwsgi_params;
行之后的nginx配置,或直接将其添加到/etc/nginx/uwsgi_params
文件。