You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask应用部署远程服务器(Gunicorn+Nginx)后重定向失效咨询

Flask重定向在Nginx+Gunicorn环境失效的原因及解决办法

核心原因:反向代理下Flask无法正确识别外部请求信息

本地测试时Flask直接处理用户请求,能正确获取请求的协议、主机名等信息,生成的重定向URL是正确的。但部署到Nginx反向代理后,Flask收到的是Nginx转发的内部请求,默认不会信任代理传递的头部信息,导致生成的重定向URL使用Gunicorn的内部地址(如http://127.0.0.1:5003/xxx),而非用户实际访问的外部域名/协议,浏览器无法正常跳转。

解决步骤:

1. 配置Flask信任代理头部

使用Werkzeug的ProxyFix中间件,让Flask正确识别Nginx传递的转发头部。修改Flask应用代码:

from werkzeug.middleware.proxy_fix import ProxyFix
# ... 其他代码 ...
app = Flask(__name__)
# 添加这行,参数代表信任的转发头部层级(通常设为1即可)
app.wsgi_app = ProxyFix(app.wsgi_app, x_for=1, x_proto=1, x_host=1, x_port=1)
# ... 其他配置(secret_key、蓝图注册等) ...

2. 完善Nginx代理头部配置

在Nginx的location /块中补充必要的转发头部,确保Flask能获取正确的外部请求信息:

location / {
    proxy_pass http://127.0.0.1:5003;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    # 添加以下两行
    proxy_set_header X-Forwarded-Host $host;
    proxy_set_header X-Forwarded-Port $server_port;
}

3. 可选:强制指定URL协议(若使用HTTPS)

如果你的站点使用HTTPS,可以直接在Flask配置中指定默认协议,避免生成HTTP的重定向URL:

app.config['PREFERRED_URL_SCHEME'] = 'https'

额外排查点

  • 检查Gunicorn日志,确认是否有重定向相关的错误信息,比如端点不存在(不过本地正常的话概率极低)。
  • 确认Blueprint的端点名称是否正确,比如youtube_api.search_videos是否是蓝图中定义的函数端点(本地运行正常则无需担心)。

内容的提问来源于stack exchange,提问作者Daniel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:42:59