flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31
2023-09-14 08:58:40 时间
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
相关文章
- 强大的nginx反向代理异步传输模式(原理)[通俗易懂]
- Nginx配置多个二级代理
- Python获取免费代理IP,并全部测试一遍,结果大失所望
- Go语言正/反向代理的姿势
- 通过Nginx反向代理,重定向链接地址
- ASEMI代理ADN8834ACBZ-R7原装ADI车规级ADN8834ACBZ-R7
- ASEMI代理AD9959BCPZ原装ADI车规级AD9959BCPZ
- SQLServer 错误 14421 日志传送辅助数据库 %s.%s 的还原阈值为 %d 分钟,并且现在不同步。在过去的 %d 分钟之内未执行任何还原操作。 还原操作滞后了 %d 分钟。 请查看代理日志和日志传送监视器信息。 故障 处理 修复 支持远程
- 搭建的vscode 服务使用nginx代理后不能访问详解程序员
- 正向代理与反向代理区别图解 (nginx)详解程序员
- Java动态代理一——动态类Proxy的使用详解编程语言
- MongoDB开启中国之旅 让中国用户体验更便捷的代理服务(mongodb中国代理)
- 利用Oracle代理连接访问数据库(oracle代理连接)
- Linux下如何安全删除Nginx(linux删除nginx)
- Linux下删除Nginx的指令(linux删除nginx)
- Nginx网站架构实战——14、反向代理实现nginx+apache动静分离
- 服务器搭建Linux二级代理服务器的技术实现(linux二级代理)
- 实现动态代理管理Redis的最佳方式(动态代理redis)
- Oracle代理读写分离优化数据库 提升性能(oracle代理读写分离)
- 善用事件代理,警惕闭包的性能陷阱。
- 让iis记录nginx反向代理的真实ip
- 如何阻止网站被恶意反向代理访问(防网站镜像)