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配置中设置了HostX-Forwarded-Proto

flask修改:

  1. from flask import Flask
  2. from werkzeug.contrib.fixers import ProxyFix
  3.  
  4. app = Flask(__name__)
  5. app.wsgi_app = ProxyFix(app.wsgi_app)

Nginx配置:

  1. location / {
  2. proxy_pass http://your_upstream/;
  3. proxy_set_header Host $host;
  4. proxy_set_header X-Forwarded-Proto $scheme;
  5. }

参考文档:

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的更多相关文章

  1. go 语言的库文件放在哪里?如何通过nginx代理后还能正确获取远程地址

    /usr/local/Cellar/go/1.5.1/libexec/src/ 他的RemoteAddr 是从哪里获取? func (c *conn) RemoteAddr() Addr { if ! ...

  2. 使用nginx代理后以及配置https后,如何获取真实的ip地址

    使用nginx代理后以及配置https后,如何获取真实的ip地址 Date:2018-8-27 14:15:51 使用nginx, apache等反向代理后,如果想获取请求的真实ip,要在nginx中 ...

  3. nginx代理后,获取request的ip

    应用程序部署上线,一般都会用nginx之类的来进行反向代理,而不是直接访问tomcat之类的容器. 这时候如果用平时的获取ip的代码,就只会获取到nginx所在服务器的ip, 就失去了本身的意义. 今 ...

  4. 经过Nginx代理后如何区分HTTP请求头中的X-Forwarded-For和X-Real-IP,以及Java示例

    在开发工作中,我们常常需要获取客户端的IP.一般获取客户端的IP地址的方法是:request.getRemoteAddr();但是在通过了Apache,Squid等反向代理软件就不能获取到客户端的真实 ...

  5. websocket使用nginx代理后连接频繁打开和关闭

    前几天开发了一个功能,使用websocket向前台发送消息,与前端联调时一切正常,但是发布到环境出现如下报错: 发现404,无法找到连接,突然想到环境上是走nginx代理的,应该是nginx没有配置代 ...

  6. go 通过nginx代理后获取用户ip

    go 如果使用自己的服务器,可以直接使用 net/http 来获取 func ip(w http.ResponseWriter, r *http.Request) { fmt.Println(r.Re ...

  7. Apache, Nginx获得nginx代理后的真实用户Ip

    Nginx 的反向代理设置  proxy_set_header X-Real-IP $remote_addr; apache可以设置日志格式将 %h替换为 %{X-Real-Ip}i 如: LogFo ...

  8. Nginx代理后服务端使用remote_addr获取真实IP

    直奔主题,在代理服务器的Nginx配置(yourWebsite.conf)的location /中添加: #获取客户端IP proxy_set_header Host $host; proxy_set ...

  9. nginx 代理https后,应用redirect https变成http --转

    原文地址:http://blog.sina.com.cn/s/blog_56d8ea900101hlhv.html 情况说明nginx配置https,tomcat正常http接受nginx转发.ngi ...

随机推荐

  1. 第02组 Alpha冲刺(2/6)

    队名:無駄無駄 组长博客 作业博客 组员情况 张越洋 过去两天完成了哪些任务 任务分配.进度监督 提交记录(全组共用) 接下来的计划 沟通前后端成员,监督.提醒他们尽快完成各自的进度 还剩下哪些任务 ...

  2. #ifndef #define #endif

    在一个大的软件工程里面,可能会有多个文件同时包含一个头文件,当这些文件编译链接成一个可执行文件时,就会出现大量重定义的错误.在头文件中实用#ifndef #define #endif能避免头文件的重定 ...

  3. Java集合详解4:一文读懂HashMap和HashTable的区别以及常见面试题

    <Java集合详解系列>是我在完成夯实Java基础篇的系列博客后准备开始写的新系列. 这些文章将整理到我在GitHub上的<Java面试指南>仓库,更多精彩内容请到我的仓库里查 ...

  4. Asp.Net 服务器控件下使用Jquery.validate.js

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  5. nginx出现403 Forbidden错误

    问题描述:将webpack打包的react前端部署到nginx上,发现出现403 Forbidden错误 解决方案:修改nginx.conf文件,添加user root;配置

  6. Java8实战及自己的总结

    java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本.   在jdk1.8中,java8以添加非常多的新特性, ...

  7. SQLServer ---------- 安装SQLserver数据库

    1.安装SQLserver 数据2008 的地址 https://jingyan.baidu.com/article/948f592434b407d80ef5f97d.html?qq-pf-to=pc ...

  8. 【题解】【网络流24题】汽车加油行驶问题 [P4009] [Loj6223]

    [题解][网络流24题]汽车加油行驶问题 [P4009] [Loj6223] 传送门:汽车加油行驶问题 \([P4009]\) \([Loj6223]\) [题目描述] 给出一个 \(N \times ...

  9. Java学习:static 关键字概述

    static 关键字概述 一旦用了static关键字,那么这样的内容不再属于对象自己.而是属于类的,所以凡是本类的对象,都共享同一份. 如果没有static关键字,那么必须首先创建对象,然后通过对象才 ...

  10. Firefox 无法播放 youtube

    今天 firefox (目前是 67,之前刚装了 62 的时候也是这个问题..)升级之后,莫名其妙没法使用 youbube 了. 尝试了很多方法,我觉得可能是这条起作用了: 1. 关闭所有网页. 2. ...