部署网站时,一个非常常见的现象是:
- 服务器能 SSH 登录
- 域名也解析到了服务器
- Nginx 看起来也启动了
- 但浏览器就是打不开网站
这类问题,十有八九不是代码问题,而是 端口、监听、防火墙、反向代理 这四层里有一层没打通。
一、先确认服务到底有没有在监听
先别急着看域名,先看本机服务是否真的起来了。
bash
ss -ltnp | grep -E '80|443|3000'
重点看三件事:
- 有没有进程监听 80 / 443
- Nginx 是否真的在监听
- 后端服务是否真的在监听 3000 之类的业务端口
如果这里看不到监听,外面当然访问不到。
二、确认监听地址是不是写错了
这是最容易忽略的坑。
比如你的 Node.js 服务只监听了:
127.0.0.1:3000
那它只能本机访问。
如果你希望被容器、局域网、反向代理之外的其他方式访问,就要留意是否应该监听:
0.0.0.0:3000
一句话记住:
127.0.0.1= 只本机可访问0.0.0.0= 所有网卡都可访问
很多"服务启动了但访问不到",根因就是监听地址不对。
三、确认防火墙和云安全组没拦截
本机服务正常,不代表公网就能进来。
你要检查两层。
1. 服务器本机防火墙
例如:
bash
ufw status
或者:
bash
firewall-cmd --list-ports
2. 云服务器安全组
如果你用的是云服务器,还要去控制台看:
- 80 端口是否放行
- 443 端口是否放行
- 是否限制了来源 IP
很多人只配了 Nginx,忘了开安全组,结果网站永远打不开。
四、确认 Nginx 代理目标是不是活的
如果你是 Nginx 反向代理 Node.js,最关键的一步是:
bash
curl http://127.0.0.1:3000
如果这一步失败,说明不是 Nginx 问题,而是你后端服务根本没起来,或者端口写错了。
再检查 Nginx 配置:
nginx
location / {
proxy_pass http://127.0.0.1:3000;
}
你要确保:
proxy_pass端口对- 后端服务真实存在
- 协议没写错
- 配置改完后执行过
nginx -t和reload
例如:
bash
nginx -t
systemctl reload nginx
最后给你一套最实用的排查顺序
网站打不开时,按这个顺序查最快:
- 先看本机服务是否监听
- 再看监听地址是否正确
- 再看防火墙 / 安全组是否放行
- 最后看 Nginx 代理是否指向了正确端口
总结
网站打不开,别上来就怀疑代码。
很多部署问题,本质上就四个字:路没打通。
你只要把这四层查清楚:
- 服务监听
- 监听地址
- 防火墙 / 安全组
- Nginx 代理
大多数网络与部署问题都能很快定位。
问题求助
没能解决你的问题?直接问我
如果你遇到任何技术问题无法解决,可以在这里提交求助。我会尽快查看并回复你。
支持作者
如果这篇文章帮到了你,可以支持我
扫码打赏,支持我持续更新原创排障文章。

