在Compute Engine实例部署Django应用并公网访问失败求助
排查GCE实例上Django应用公网访问失败问题
已完成操作概述
- 通过Gunicorn启动Django应用,绑定
0.0.0.0:8000,日志显示服务正常启动 - 创建Nginx站点配置文件
/etc/nginx/sites-available/AImage,并软链接到sites-enabled目录 - 配置Nginx反向代理到
http://0.0.0.0:8000,监听80端口,指定公网IP为server_name - 重启Nginx服务
本地可ping通GCE公网IP,但浏览器无法访问应用,可按以下步骤排查:
1. 检查GCE VPC防火墙规则
GCE默认防火墙会限制入站流量,需确保允许TCP 80端口的公网入站请求:
- 登录GCE控制台,进入对应实例的VPC网络 -> 防火墙规则
- 创建或确认存在一条规则,方向为入站,目标为实例,协议端口选择
tcp:80,源IP范围设为0.0.0.0/0
2. 验证Nginx服务状态与日志
- 检查Nginx是否正常运行:
若服务异常,先修复启动问题;若运行正常,查看错误日志排查反向代理问题:sudo systemctl status nginxsudo tail -20 /var/log/nginx/error.log
3. 确认Gunicorn监听状态
在GCE实例内部,验证Gunicorn是否确实在监听8000端口:
ss -tulpn | grep 8000
输出应包含gunicorn进程,且监听地址为0.0.0.0:8000或127.0.0.1:8000
4. 本地测试应用与反向代理
在GCE实例内部,先测试Django应用本身是否可访问:
curl http://localhost:8000
若返回正常页面,再测试Nginx反向代理是否生效:
curl http://<你的GCE公网IP>
若curl也无法返回内容,说明Nginx配置或转发存在问题
5. 校验Nginx配置语法
运行以下命令检查配置文件是否存在语法错误:
sudo nginx -t
若报错,根据提示修正配置(比如server_name是否填写了正确的公网IP,proxy_pass地址是否正确,可尝试改为http://127.0.0.1:8000)
6. 检查实例本地防火墙
若实例启用了ufw或iptables,需确保允许80端口的入站流量:
# 针对ufw sudo ufw allow 80/tcp sudo ufw reload
内容的提问来源于stack exchange,提问作者Lê Hồng Nhật
相关产品推荐
相关产品推荐

