排查小记(1):云服务器上 Nginx 本地能访问、公网却超时:一次完整的排查记录

举报
前路漫漫 发表于 2026/10/27 10:41:40 2026/10/27
【摘要】 新购 CentOS 云服务器部署 Nginx 后,本机 curl http://localhost 返回欢迎页,但浏览器访问公网 IP 连接超时。本文记录从安全组、firewalld、监听地址到端口占用的完整排查过程,并给出一份可复用的外网访问故障排查清单。

一、问题现象

在一台 CentOS 云服务器上安装 Nginx 做测试,出现典型的“半通”现象:

- 服务器本机执行 curl http://localhost,正常返回 Nginx 欢迎页;
- 本地电脑浏览器访问 ECS 公网 IP,长时间无响应,最终提示连接超时。

已确认的三项前置条件:安全组入方向已放行 80 端口(源地址 0.0.0.0/0);firewalld 处于关闭状态;systemctl status nginx 显示 running。

二、排查思路

“本机通、外网不通”说明 Nginx 本身工作正常,问题出在流量到达 Nginx 之前的链路,或Nginx 只接受了本机流量。按由外到内、由简到繁的顺序排查。

1. 确认监听地址是否为 0.0.0.0

这是最高频的原因。执行:

ss -tuln | grep :80

若输出为 127.0.0.1:80,说明 Nginx 只绑定回环地址,外部 IP 的请求根本不会被受理。修改配置:

server {
    listen 80;
    server_name _;
    ...
}

然后 systemctl restart nginx。正常应看到 0.0.0.0:80 或 :::80。

2. 确认 80 端口被谁占用

systemctl status nginx 显示 running 并不等于成功监听了 80 端口,主进程存活但 worker 绑定失败的情况并不少见。执行:

lsof -i:80
netstat -tulnp | grep :80

核对进程名是否为 nginx。若被其他服务占用,停掉冲突进程后重启 Nginx。

3. 查看错误日志

tail -f /var/log/nginx/error.log

重点看 bind() to 0.0.0.0:80 failed (98: Address already in use) 这类绑定失败记录,它能直接区分“配置错误”和“端口冲突”。

4. 从客户端侧验证端口连通性

在本地电脑而非服务器上测试:

telnet  80        # Windows
nc -zv  80        # macOS / Linux

- 返回 Connection refused:端口未监听或服务异常,回到第 1、2 步;
- 返回 Connection timed out:报文被中间环节丢弃,需复查安全组是否真正生效、是否存在其他防火墙或网络 ACL。

三、结论

本次问题的根因是 Nginx 监听地址绑定在了 127.0.0.1,改为监听 80(即所有网卡)并重启后,公网访问恢复正常。

四、可复用的排查清单

1. 安全组 / 网络 ACL 是否放行目标端口;
2. 系统防火墙(firewalld / iptables / nftables)状态;
3. 服务是否监听 0.0.0.0 而非 127.0.0.1;
4. 目标端口是否被其他进程占用;
5. 服务错误日志是否有绑定失败或配置告警;
6. 客户端侧 telnet / nc 判断是 refused 还是 timeout;
7. 应用层是否有额外的 IP 白名单、SELinux 策略限制。


【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。