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

如何调试Gunicorn部署的Flask应用?启动后网站无法访问

调试Gunicorn无法访问Flask应用的问题

我来帮你一步步排查这个问题——从你的描述和日志来看,核心问题出在Gunicorn的绑定配置和WSGI入口文件的写法上,下面是具体的调试步骤和修复建议:

1. 先解决最直接的访问限制问题

看你的Gunicorn启动日志,它默认绑定了http://127.0.0.1:8000,这个地址只能让服务器本地访问,而你用python run.py时指定了host="0.0.0.0",允许外部机器访问。所以首先要修改Gunicorn的启动命令,指定绑定地址和端口:

gunicorn -w 3 --bind 0.0.0.0:5090 flaskodesiapp:create_app

这样Gunicorn就会和run.py一样监听所有网卡的5090端口,外部就能访问了。

2. 修正WSGI入口文件的写法

你的wsgi.py有个小问题:当Gunicorn调用它时,__name__不会等于__main__,所以里面的app = create_app(config=Config)这段代码根本不会执行。正确的WSGI入口应该直接导出app实例,把代码移出if __name__ == "__main__"块:

from flaskodesiapp import create_app
from flaskodesiapp.config import Config

# 直接创建app实例,供Gunicorn调用
app = create_app(config=Config)

之后你可以用这个wsgi文件启动Gunicorn,命令更清晰:

gunicorn -w 3 --bind 0.0.0.0:5090 wsgi:app

3. 优化create_app函数的配置加载逻辑

你的create_app函数里有个小疏漏:参数config_class=Config定义了,但实际加载时用了硬编码的Config,而不是传入的config_class。虽然当前Config只有SMTP凭证不影响访问,但为了代码健壮性,建议修正:

def create_app(config_class=Config):
    app = Flask(__name__)
    # 使用传入的config_class参数,而不是硬编码的Config
    app.config.from_object(config_class)
    from flaskodesiapp.odesi.routes import odesi
    from flaskodesiapp.errors.handlers import errors
    app.register_blueprint(odesi)
    app.register_blueprint(errors)
    return app

4. 进一步排查的步骤

如果按上面修改后还是无法访问:

  • 先在服务器本地用curl http://127.0.0.1:5090测试,看是否能得到响应。如果本地能访问但外部不行,说明是服务器防火墙或端口转发的问题,需要确保5090端口对外开放。
  • 启用Gunicorn的调试日志,获取更多细节:
gunicorn -w 3 --bind 0.0.0.0:5090 --log-level debug wsgi:app

查看日志里是否有请求到达、路由匹配错误等信息,帮助定位应用内部的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.08 19:32:40