在我的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"
有什么想法吗?
答案 0 :(得分:14)
刚刚找到答案。 Apache有一个名为ProxyPreserveHost
的选项。一旦设置为On,一切都按预期工作。
此处提供更多信息:http://flask.pocoo.org/mailinglist/archive/2011/3/14/problem-with-apache-proxy-and-canonical-urls/