GCP VM上Nginx服务Telnet port 80正常但跨多网络HTTP访问被拒是什么原因?
GCP VM Nginx 80端口浏览器访问拒绝排查方案
1. 校验Nginx服务监听配置
- 登录VM后执行
ss -tulpn | grep :80,确认80端口的监听进程为Nginx,且监听地址为0.0.0.0:80/:::80,而非仅127.0.0.1:80(仅监听本地环回的话仅VM本地可访问,外部访问会被拒绝) - 检查Nginx主配置
/etc/nginx/nginx.conf或站点配置(默认存于/etc/nginx/sites-available/目录)的listen字段,确认未绑定特定私有IP,也未配置allow/deny规则限制80端口的访问IP段 - 配置修改后先执行
nginx -t校验语法合法性,再执行systemctl reload nginx使配置生效
2. 检查GCP平台网络规则
- 确认VPC入站防火墙规则存在允许
0.0.0.0/0(所有公网IP)访问TCP 80端口的规则,且规则绑定的目标标签与当前VM的网络标签匹配 - 确认VM分配的是静态公网IP,避免IP动态变更导致浏览器访问的是过期地址
- 确认VM未启用GCP Identity-Aware Proxy(IAP)强制访问控制,如有启用需调整规则开放80端口的公网访问权限
3. 排查访问行为差异
你提到的Telnet连通需先确认操作环境:
- 若为仅VM本地执行
telnet 127.0.0.1 80可通,按前两步排查监听配置与防火墙规则即可 - 若为外部公网环境执行
telnet <VM公网IP> 80可通但浏览器访问拒绝,重点检查以下项:- Nginx是否配置了强制HTTPS跳转,自动将80端口请求跳转到443端口,但443端口未开放监听或防火墙未放行,浏览器跳转后访问被拒绝
- 浏览器是否默认强制使用HTTPS协议访问(部分浏览器对特殊后缀域名会强制HTTPS),可手动在地址栏输入
http://<VM公网IP>(不能省略http前缀)测试 - 检查VM本地是否开启了ufw、firewalld等防火墙,执行
iptables -L -n确认无规则拦截公网IP对80端口的访问
4. 快速定位验证
- VM本地执行
curl -v http://127.0.0.1,确认Nginx可正常返回index.html内容 - 公网环境执行
curl -v http://<VM公网IP>,对比返回结果:若可正常返回内容则为浏览器侧配置问题,若返回connection refused则为网络或服务监听问题
内容的提问来源于stack exchange,提问作者Mark McWiggins
相关产品推荐
相关产品推荐

