flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31
2024-08-31 07:57:56
http://www.axiaoxin.com/article/210/
Nginx配置了https请求后,用户发起https请求时首先和Nginx建立连接,完成SSL握手,而后Nginx作为代理是以http协议将请求转给gunicorn处理的,Nginx再把gunicorn的输出通过SSL加密发回给用户,这中间是透明的,gunicorn只是在处理http请求而已。
这时即使请求时用的是https,flask中的request中wsgi.url_scheme
收到的仍然是http,所以在其他url相关的地方的值都是http链接。
解决办法是在flask中使用ProxyFix,并且确保nginx配置中设置了Host
和X-Forwarded-Proto
flask修改:
from flask import Flask
from werkzeug.contrib.fixers import ProxyFix app = Flask(__name__)
app.wsgi_app = ProxyFix(app.wsgi_app)
Nginx配置:
location / {
proxy_pass http://your_upstream/;
proxy_set_header Host $host;
proxy_set_header X-Forwarded-Proto $scheme;
}
参考文档:
https://groups.google.com/forum/#!topic/pocoo-libs/KAle_rNC1V8
http://docs.jinkan.org/docs/flask/deploying/wsgi-standalone.html#deploying-proxy-setups
http://werkzeug.pocoo.org/docs/contrib/fixers/#werkzeug.contrib.fixers.ProxyFix
https://github.com/mitsuhiko/werkzeug/blob/master/werkzeug/contrib/fixers.py#L81
最新文章
- 如何在Windows Server 2008 R2 SP1安装Redis-x64-3.2.100,并且自动注册服务
- NPM 使用淘宝镜像
- [OC] 理解Bitcode:一种中间代码
- 出现( linker command failed with exit code 1)错误总结 (转)
- requireJS的引用
- 建筑行业如何用BPM替换OA?
- ArcGIS API for Silverlight动态标绘的实现
- 无责任Windows Azure SDK .NET开发入门篇二[使用Azure AD 进行身份验证]
- chmod -R o+rX /data
- logstash multiline
- 使用脚本管理IIS
- linux安装桌面软件
- 列表的实现-----数据结构与算法JavaScript描述 第三章
- 第九讲:HTML5该canvas推箱子原型实现
- LPC2478内存布局以及启动方式
- JavaScript从作用域到闭包
- SpringMVC之Controller和参数绑定
- 【NLP】大白话讲解word2vec到底在做些什么
- 2017-9-7-Linux Mint TFTP服务安装开启
- Statement、PreparedStatement、CallableStatement的区别