不需要的 HTTPS -> 使用 nginx + uwsgi + flask 应用程序进行 HTTP 重定向
Posted
技术标签:
【中文标题】不需要的 HTTPS -> 使用 nginx + uwsgi + flask 应用程序进行 HTTP 重定向【英文标题】:unwanted HTTPS -> HTTP redirects with nginx + uwsgi + flask app 【发布时间】:2011-11-12 11:18:24 【问题描述】:我有一个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;
【问题讨论】:
【参考方案1】:uwsgi 需要传递用于服务请求的方案(http 或 https)才能写入正确的 Location 标头。
默认情况下,/etc/nginx/uwsgi_params
文件中设置了一系列设置。配置文件中的include uwsgi_params;
行是加载这些的。
但是,无论出于何种原因,该方案并不是这些默认设置之一。这可以通过添加来解决:
uwsgi_param UWSGI_SCHEME $scheme;
到 include uwsgi_params;
行之后的 nginx 配置中,或者直接将其添加到 /etc/nginx/uwsgi_params
文件中。
【讨论】:
这正是我想要的。谢谢。以上是关于不需要的 HTTPS -> 使用 nginx + uwsgi + flask 应用程序进行 HTTP 重定向的主要内容,如果未能解决你的问题,请参考以下文章