Flask的request.is_secure麻烦使用gunicorn和heroku使用Flask

时间:2014-07-23 15:23:03

标签: heroku flask gunicorn

我已经在网上讨论过这个问题,但修复它的解释并不十分清楚,特别是如果你不熟悉Flask的话。这就是当flask在Heroku上的gunicorn上运行时,request.is_secure总是返回False的问题,即使请求是通过HTTPS完成的。我正在使用Flask 0.8和gunicorn 19.0.0。

我找到了this链接,看起来好像你用这些内容创建了一个名为gunicorn.py的文件,但这只是在Heroku服务器上创建了一个导入错误。然后我尝试通过执行以下操作来获取这些设置并将它们直接应用到我的app Flask对象:

app.secure_proxy_ssl_header = ('HTTP_X_FORWARDED_PROTO', 'https')
app.forwarded_allow_ips = '*'
app.x_forwarded_for_header = 'X-FORWARDED-FOR'
app.secure_scheme_headers = {
'X-FORWARDED-PROTO': 'https',
}

但仍然没有骰子。有人可以说清楚我要做什么,把配置放在哪里?

2 个答案:

答案 0 :(得分:2)

我知道你已经解决了问题,但我遇到了类似的问题,不得不在Apache中设置第二个RequestHeader:

  ProxyPreserveHost On
  RequestHeader set X-Forwarded-Proto "https"
  RequestHeader set X-Scheme https
  Timeout 300
  ProxyTimeout 300

这似乎有效。

答案 1 :(得分:1)

原来解决方案比我想象的要简单得多。我所要做的就是:

from werkzeug.contrib.fixers import ProxyFix

然后

app.wsgi_app = ProxyFix(application.wsgi_app)