使用 SERVER_NAME 时的 Flask 404
Posted
技术标签:
【中文标题】使用 SERVER_NAME 时的 Flask 404【英文标题】:Flask 404 when using SERVER_NAME 【发布时间】:2014-04-14 11:37:12 【问题描述】:在我的 Flask 配置中,我将 SERVER_NAME 设置为像“app.example.com”这样的域。我这样做是因为我需要将url_for
与_external
URL 一起使用。如果 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"
有什么想法吗?
【问题讨论】:
【参考方案1】:刚刚找到答案。 Apache 有一个名为ProxyPreserveHost
的选项。一旦设置为开启,一切都会按预期进行。
更多信息在这里:http://flask.pocoo.org/mailinglist/archive/2011/3/14/problem-with-apache-proxy-and-canonical-urls/
【讨论】:
好发现!这是 nginx 的修复:proxy_set_header Host $host;
你可能还需要proxy_redirect off;
用于 nginx
@PieterEnnes 你绝对应该回答这正是我所需要的谢谢
如果发帖人编辑了他的答案以包括 @PieterEnnes 对 nginx 的答案,那就太好了,因为它确实有效。
如果您的地址中有端口并使用nginx
,您可能需要使用proxy_set_header Host $http_host;
,因为$http_host
包含端口。以上是关于使用 SERVER_NAME 时的 Flask 404的主要内容,如果未能解决你的问题,请参考以下文章