【问题标题】:Flask 404 when using SERVER_NAME使用 SERVER_NAME 时的 Flask 404
【发布时间】: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"

有什么想法吗?

【问题讨论】:

    标签: python apache flask


    【解决方案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 包含端口。
    猜你喜欢
    • 2018-04-10
    • 2018-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 2019-02-13
    相关资源
    最近更新 更多