flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31
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
flask通过nginx代理后base_url拿不到正确的url_scheme2016-04-14 12:31的更多相关文章
- go 语言的库文件放在哪里?如何通过nginx代理后还能正确获取远程地址
/usr/local/Cellar/go/1.5.1/libexec/src/ 他的RemoteAddr 是从哪里获取? func (c *conn) RemoteAddr() Addr { if ! ...
- 使用nginx代理后以及配置https后,如何获取真实的ip地址
使用nginx代理后以及配置https后,如何获取真实的ip地址 Date:2018-8-27 14:15:51 使用nginx, apache等反向代理后,如果想获取请求的真实ip,要在nginx中 ...
- nginx代理后,获取request的ip
应用程序部署上线,一般都会用nginx之类的来进行反向代理,而不是直接访问tomcat之类的容器. 这时候如果用平时的获取ip的代码,就只会获取到nginx所在服务器的ip, 就失去了本身的意义. 今 ...
- 经过Nginx代理后如何区分HTTP请求头中的X-Forwarded-For和X-Real-IP,以及Java示例
在开发工作中,我们常常需要获取客户端的IP.一般获取客户端的IP地址的方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...
- websocket使用nginx代理后连接频繁打开和关闭
前几天开发了一个功能,使用websocket向前台发送消息,与前端联调时一切正常,但是发布到环境出现如下报错: 发现404,无法找到连接,突然想到环境上是走nginx代理的,应该是nginx没有配置代 ...
- go 通过nginx代理后获取用户ip
go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) { fmt.Println(r.Re ...
- Apache, Nginx获得nginx代理后的真实用户Ip
Nginx 的反向代理设置 proxy_set_header X-Real-IP $remote_addr; apache可以设置日志格式将 %h替换为 %{X-Real-Ip}i 如: LogFo ...
- Nginx代理后服务端使用remote_addr获取真实IP
直奔主题,在代理服务器的Nginx配置(yourWebsite.conf)的location /中添加: #获取客户端IP proxy_set_header Host $host; proxy_set ...
- nginx 代理https后,应用redirect https变成http --转
原文地址:http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.html 情况说明nginx配置https,tomcat正常http接受nginx转发.ngi ...
随机推荐
- Linux搭建简单的http文件服务器
为了让自动化脚本可以通过wget来下载安装包,需要在集群中的某个节点部署一个http文件服务器 在Ubuntu中通过apt-get install apache2 安装apache2CentOS7中通 ...
- 关于Vue中props的详解
看一下官方文档: 组件实例的作用域是孤立的.这意味着不能 (也不应该) 在子组件的模板内直接引用父组件的数据.父组件的数据需要通过 prop 才能下发到子组件中. 也就是props是子组件访问父组件数 ...
- 使用CSS隐藏元素滚动条
如何隐藏滚动条,同时仍然可以在任何元素上滚动? 首先,如果需要隐藏滚动条并在内容溢出时显示滚动条,只需要设置overflow:auto样式即可.想要完全隐藏滚动条只需设置overflow:hidden ...
- 运维-kibana常用查询使用
1.登录服务器地址 http://kibana.ops.xxx.com.cn/ 查询语法: 支持 AND , OR, && || >,< ,=模糊 *,! 1.如查询n ...
- WebGPU学习(七):学习“twoCubes”和“instancedCube”示例
大家好,本文学习Chrome->webgpu-samplers->twoCubes和instancedCube示例. 这两个示例都与"rotatingCube"示例差不 ...
- PG数据库CPU和内存满负荷运转优化案
1.问题描述 某客户系统采用三层架构:数据库—应用服务—前端应用.其中数据库使用PostgreSQL 10.0作为数据库软件.自周四起,服务器的CPU与内存使用率持续处于过饱合状态,并因此导致了数次宕 ...
- pyenv和pipenv简单使用
一.安装pyenv 安装pyenv $ git clone git://github.com/yyuu/pyenv.git ~/.pyenv $ echo 'export PYENV_ROOT=&qu ...
- package.json中dependencies 与devDependencies 的区别
首先,dependencies中安装的依赖是生产环境的依赖,即项目要运行所必须安装的包:devDependencies中安装的的依赖是开放环境的依赖,即在开发项目时需要安装的依赖. 其次,在安装依赖的 ...
- k8s部署nacos之二 nfs
1.在linux服务器下载nacos 首先安装git命令 yum install git git clone https://github.com/nacos-group/nacos-k8s.git ...
- 集成开发环境(IDE)
学习目标: 1.了解Java的IDE开发工具 2.会使用Eclipse.IDEA开发工具新建项目,编写代码,并运行程序. 学习过程: 使用文本开发效率无疑是很低的,每次编写完代码后,还需要手动的编译执 ...