使用SERVER_NAME时的Flask 404

nat*_*ill 9 python apache flask

在我的Flask配置中,我将SERVER_NAME设置为"app.example.com"之类的域.我这样做,因为我需要使用url_for_external网址.如果未设置SERVER_NAME,Flask认为服务器是127.0.0.1:5000(它实际上是在反向代理后面运行),并返回一个外部URL,如http://127.0.0.1:5000/location.

到现在为止还挺好.但是这是我的问题:设置SERVER_NAME后,每个URL都返回404.我看到每个请求都到达服务器,到达正确的URL,但Flask以404响应.如果我禁用SERVER_NAME,则返回正确的页面.

我正在使用Apache与ProxyPass和ProxyPassReverse(我知道,我宁愿使用Nginx,但这是一个要求).这是我正在添加的标题:

Header add Host "app.example.com"
RequestHeader set Host "app.example.com"

Header add X-Forwarded-Host "app.example.com"
RequestHeader set X-Forwarded-Host "app.example.com"
Run Code Online (Sandbox Code Playgroud)

有任何想法吗?

nat*_*ill 14

刚刚找到答案.Apache有一个名为的选项ProxyPreserveHost.一旦设置为On,一切都按预期工作.

更多信息请访问:http://flask.pocoo.org/mailinglist/archive/2011/3/14/problem-with-apache-proxy-and-canonical-urls/

  • 很好找!这是nginx的修复:`proxy_set_header Host $ host;` (6认同)