部署在VPS的Flask-Gunicorn-Docker应用无法通过公网IPv4访问
解决Flask+Gunicorn部署后公网无法访问的问题
以下是按优先级排序的排查和解决步骤:
检查VPS服务商安全组规则
绝大多数云服务商(如阿里云、腾讯云、AWS等)都有独立于系统防火墙的安全组配置,这是最常见的访问失败原因。登录VPS控制台,找到安全组的入站规则,确保已添加允许0.0.0.0/0访问目标端口(比如80)的规则,协议选择TCP。验证系统防火墙状态
执行对应系统的命令检查端口是否开放:- Ubuntu/Debian系统:
ufw status,查看输出中是否包含80/tcp的允许规则;如果没有,执行ufw allow 80/tcp开放端口。 - CentOS/RHEL系统:
firewall-cmd --list-ports,确认80端口在列表中;如果没有,执行firewall-cmd --add-port=80/tcp --permanent && firewall-cmd --reload生效规则。
- Ubuntu/Debian系统:
确认端口实际监听情况
日志显示监听0.0.0.0:80但可能存在实际监听异常,执行ss -tulpn | grep 80(或netstat -tulpn | grep 80),检查输出:- 必须存在gunicorn进程,且监听地址为
0.0.0.0:80,而非127.0.0.1:80(后者仅允许本地访问)。 - 如果监听地址错误,检查Gunicorn启动命令的
--bind=0.0.0.0:80参数,确保无拼写错误(比如误写为localhost:80)。
- 必须存在gunicorn进程,且监听地址为
测试本地应用可用性
在VPS本地执行curl http://127.0.0.1:80,验证应用是否正常响应:- 如果返回500错误,检查Flask模板路径:确保
index.html位于项目根目录下的templates文件夹内,项目结构应为:project_root/ ├── app.py └── templates/ └── index.html - 如果返回连接拒绝,说明Gunicorn未正确加载应用,检查启动命令中的
app:create_app()是否正确,确保app.py在当前工作目录,或使用绝对路径指定(如/opt/my_app/app:create_app())。
- 如果返回500错误,检查Flask模板路径:确保
网络连通性验证
- 本地执行
ping 你的公网IPv4地址,如果无法ping通,联系VPS服务商确认公网IP状态及网络链路。 - 用
nc -zv 你的公网IPv4地址 80测试端口连通性,若提示Connection refused,回到前面的防火墙和监听检查步骤。
- 本地执行
内容的提问来源于stack exchange,提问作者Uhmzzzzmmmm
相关产品推荐
相关产品推荐

