网站突然打不开时,最忌讳的就是一上来重启所有服务。
更有效的做法是按顺序排查:域名 → 网络 → Nginx → 后端 → 数据库 → 系统资源。这样基本能很快定位问题在哪一层。
1. 先确认是不是域名问题
先测试域名是否还能正常解析:
ping example.com或者:
nslookup example.com如果域名解析到了错误 IP,或者根本解析不到,就先检查 DNS。
如果域名解析正常,再直接测试服务器 IP。
2. 检查服务器还能不能连接
尝试 SSH:
ssh root@服务器IP如果 SSH 也连接不上,问题可能已经不是网站本身,而是:
服务器宕机 网络故障 安全组限制 防火墙配置错误 云服务器被暂停如果 SSH 正常,就继续往下查。
3. 检查 80 和 443 端口
执行:
ss -lntp | grep -E '80|443'正常情况下应该能看到 Nginx 或其他 Web 服务监听:
0.0.0.0:80 0.0.0.0:443如果完全没有监听,优先检查 Nginx。
4. 检查 Nginx 是否正常
查看状态:
systemctl status nginx如果显示:
failed inactive先检查配置:
nginx -t配置没问题再启动:
systemctl restart nginx如果启动失败,直接看日志:
tail -n 100 /var/log/nginx/error.log5. 在服务器本机测试网站
可以绕过公网直接访问 Nginx:
curl -I http://127.0.0.1如果是多域名服务器,可以指定 Host:
curl -I -H "Host: example.com" http://127.0.0.1如果本机访问正常,但公网打不开,通常要检查:
防火墙 安全组 DNS CDN 公网网络6. 出现 502 时检查后端
如果页面直接显示:
502 Bad Gateway通常意味着 Nginx 正常,但后端服务挂了。
假设后端使用 3000 端口:
ss -lntp | grep 3000然后测试:
curl http://127.0.0.1:3000如果连接失败,就检查对应服务:
systemctl status myapp查看日志:
journalctl -u myapp -n 1007. 检查数据库是否异常
有些网站首页能打开,但登录、订单、接口全部报错,这时候要考虑数据库。
例如 MySQL:
systemctl status mysql或者:
systemctl status mariadb如果数据库本身正常,还要检查应用日志里有没有:
Connection refused Too many connections Access denied Connection timeout很多所谓“网站挂了”,实际上是数据库连接失败。
8. 检查磁盘是不是满了
这是非常容易忽略的问题。
执行:
df -h如果看到:
/dev/sda1 100%说明磁盘已经满了。
磁盘满以后可能出现:
日志无法写入 数据库异常 应用无法创建临时文件 服务启动失败继续检查:
du -sh /var/log/*很多时候都是日志文件长期没有清理。
9. 检查内存和 CPU
执行:
free -h查看内存。
再执行:
top如果某个进程 CPU 长时间 100%,或者内存基本耗尽,就可能导致网站无响应。
还可以检查是否发生 OOM:
dmesg | grep -i oom如果程序因为内存不足被系统杀掉,这里通常能看到记录。
10. 查看最近有没有修改配置
如果网站之前一直正常,刚修改完配置就打不开,优先回忆最近做过什么:
修改 Nginx 更新代码 修改环境变量 升级 Node.js 更新数据库 修改防火墙 更换证书很多故障都和最近一次变更有关。
不要一开始就怀疑服务器环境,先检查最近改过的东西往往更快。
一套常用排查顺序
遇到网站打不开,我一般依次执行:
ping 域名ss -lntpsystemctl status nginxnginx -tcurl -I http://127.0.0.1然后再检查:
systemctl status 后端服务 df -h free -h top如果是 502,就重点查后端;如果 SSH 都连不上,就先查服务器和网络;如果本机正常但公网异常,就查 DNS、防火墙和 CDN。
网站故障看起来复杂,但只要按层排查,基本都能缩小范围。比起不停重启服务,先判断到底是哪一层出了问题,通常效率更高。