使用SERVER_NAME时Flask出现404错误

12 投票
1 回答
4209 浏览
提问于 2025-04-17 21:44

在我的Flask配置中,我把SERVER_NAME设置成像“app.example.com”这样的域名。这样做是因为我需要用到url_for来生成_external的链接。如果不设置SERVER_NAME,Flask会认为服务器是127.0.0.1:5000(其实它是在一个反向代理后面运行的),然后返回像http://127.0.0.1:5000/location这样的外部链接。

到目前为止一切正常。但我遇到的问题是:设置了SERVER_NAME后,每个链接都返回404错误。我看到每个请求都到达了服务器,链接也是正确的,但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 个回答

18

我刚找到答案。Apache有一个选项叫做 ProxyPreserveHost。一旦把它设置为开启,所有东西就会按预期工作。

更多信息可以在这里找到: http://flask.pocoo.org/mailinglist/archive/2011/3/14/problem-with-apache-proxy-and-canonical-urls/

撰写回答