【问题标题】:Flask url_for ignoring port烧瓶 url_for 忽略端口
【发布时间】:2016-01-12 09:53:16
【问题描述】:

我有一个在端口 5000 上运行的 Flask 应用程序。我的服务器管理员已将 nginx 配置为将其转发到端口 5001(抱歉,如果我的术语有误:Flask 应用程序在端口 5000 上运行,但该应用程序可在以下位置公开访问http://the_url:5001)。

在浏览器中直接访问的所有路由都有效,但任何使用 url_for() 的重定向似乎都会导致 URL 丢失端口 — 即 redirect(url_for('index')) 重定向到 http://the_url/ 而不是 http://the_url:5001/(其中 @987654329 @触发函数index())。

如何确保 Flask 在重定向时添加正确的端口?如果我将默认端口更改为 5001,nginx 配置将无法正常工作,因为它希望应用程序在端口 5000 上运行?

【问题讨论】:

标签: python flask


【解决方案1】:

将此添加到您的 Nginx 配置中: proxy_set_header Host $http_host; 要么 proxy_set_header Host $host:5001

read here

【讨论】:

  • 还使用 url_for(x, _external=True) 以便它根据标头构造 URL
【解决方案2】:

尝试在 nginx 配置中添加类似的内容。

location / {
            proxy_pass http://localhost:5000;

            proxy_set_header X-Real-IP $remote_addr;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

            proxy_set_header X-NginX-Proxy true;
        }

这样你可以让你的烧瓶应用在 localhost:5000 上运行。如果您正确设置了server { listen 80; } 配置(在配置的顶部),用户应该能够访问端口 80,它将重定向到内部 5000 端口。我所有的url_for() 都能完美运行。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-03-01
    • 1970-01-01
    • 2012-05-06
    • 1970-01-01
    • 2016-03-31
    • 2018-07-13
    • 2023-03-09
    相关资源
    最近更新 更多