用心打造
VPS知识分享网站

SSH明明能连,网站却突然打不开?我一般先查这6个地方

服务器还能 SSH 登录,网站却突然打不开,这种情况其实比整台 VPS 宕机更让人头疼。

因为机器明明还活着,命令也能正常执行,偏偏浏览器访问域名就是超时、502、504,或者直接提示连接失败。

我自己遇到这类问题时,已经很少一上来就重启服务器。SSH 能连,本身就说明机器大概率没有彻底挂掉,问题更可能出在 Web 服务、端口、资源占用、域名解析或者防火墙。

按顺序查,很多时候几分钟就能定位。

SSH明明能连,网站却突然打不开?我一般先查这6个地方

先确认网站服务到底还在不在

我第一步不会看域名,而是先看 Nginx 或 Apache 有没有正常运行。

Nginx 可以执行

systemctl status nginx

Apache 则可以看

systemctl status apache2

有些 CentOS 系统服务名是 httpd。

看到 active (running),至少说明 Web 服务进程还在。

状态已经变成 failed,就继续看最近的错误日志。Nginx 可以直接运行

journalctl -u nginx -n 50 --no-pager

很多问题在这里已经能直接看到原因,比如配置文件写错、证书路径丢失、端口被占用,或者重启服务时加载失败。

我比较不建议看到 Nginx 挂了就马上 restart。

先看一眼错误信息,再重启,往往能少走很多弯路。

服务正常,再看 80 和 443 端口

Nginx 显示正常,不代表网站端口一定正常监听。

可以运行

ss -lntp

重点找 80 和 443。

正常情况下,应该能看到对应端口处于 LISTEN 状态。

这里有个很常见的坑。Nginx 虽然启动成功,但配置文件改过以后,某个网站并没有真正监听 443,浏览器访问 HTTPS 自然打不开。

也有可能另一个程序抢占了端口。

比如 Docker 容器、Apache 和 Nginx 同时都想监听 80,最后真正占着端口的并不是你以为的那个服务。

这时候继续折腾 DNS 没什么意义,问题就在服务器里面。

别急着怪服务器,先本机访问一次

确认端口以后,我会在 VPS 自己内部访问网站。

运行

curl -I http://127.0.0.1

需要测试 HTTPS,也可以直接请求实际域名。

这里特别有用。

服务器内部访问正常,外部浏览器却打不开,排查范围一下就小了很多。Nginx、PHP、网站程序大概率还能正常工作,更值得去看安全组、防火墙、DNS 和公网线路。

本机访问也失败,那就继续留在服务器内部查。

这一步相当于把“网站问题”和“网络问题”先分开。

502 和 504,别只盯着 Nginx

很多 WordPress 网站突然打不开,页面会直接出现 502 Bad Gateway。

看到 502 时,我一般不会折腾域名。

Nginx 还能把 502 页面返回给浏览器,本身就证明请求已经到服务器了。真正出问题的往往是 Nginx 后面的 PHP-FPM、Node.js、Python 或其他后端程序。

WordPress 环境可以看看 PHP-FPM 状态。

例如

systemctl status php8.2-fpm

具体版本根据服务器环境调整。

PHP-FPM 挂掉以后,Nginx 还活着,但 PHP 页面已经没人处理,502 就出来了。

504 更偏向后端响应时间过长。数据库卡住、PHP 进程堵塞、第三方接口一直不返回,都可能造成这种现象。

502 更像“后端没接上”,504 更像“后端接上了,但迟迟没回”。

这两个状态码其实已经给了不少排查方向。

磁盘满了,网站也可能突然挂

这一点特别值得检查。

SSH 还能登录,并不代表磁盘还有空间。

运行

df -h

我见过不少网站突然 502、数据库异常,最后发现根分区已经 100%。

MySQL 没空间写数据,PHP 写不了临时文件,日志也无法继续生成,整个网站环境就开始出现各种奇怪的问题。

Docker 用户还要多看一眼。

docker system df

镜像、容器日志、旧版本和缓存,很容易在后台悄悄占掉几十 GB。

网站昨天还正常,今天突然出问题,磁盘空间永远值得顺手看一眼。

CPU 不高,也不代表机器没有资源问题

有些 VPS 看 CPU 只有 20%,感觉资源很充足,但网站依然很卡。

这时我会运行

free -h

重点看 available 和 Swap。

物理内存已经很低,Swap 又大量使用时,网站会明显变慢。机器还能 SSH,不代表 PHP 和数据库还能舒服地工作。

再看一眼

top

PHP-FPM、MySQL、Java 或某个 Docker 容器有没有突然吃掉大量资源,基本都能看出来。

资源问题最麻烦的一点,就是服务器表面上“没死”。

SSH 能连,命令也能执行,真正承受业务的进程却已经在边缘挣扎。

服务器内部都正常,就该往外查了

前面的检查都没发现异常,网站本机访问也正常,这时候才轮到公网层面。

我会重点确认下面几项。

检查项 常见问题
DNS 域名解析到了旧 IP
云平台安全组 80、443 没放行
系统防火墙 UFW、firewalld 拦截
CDN 回源地址错误或源站被拦
SSL 证书过期、证书链异常
公网 IP IP 被封、路由异常

这里最容易遇到的是换过 VPS IP,却忘记同步 DNS。

也有人迁移网站以后,只改了 A 记录,没有检查 CDN 后台里的源站地址,结果用户访问到 CDN,CDN 又一直向旧服务器回源。

服务器内部看起来完全正常,外面就是打不开。

这也是为什么我现在处理网站故障,会刻意把“服务器内部”和“公网访问”分开。

混在一起查,很容易越查越乱。

我现在最常用的排查顺序

网站打不开,但 SSH 还能连,我大致会按这个节奏走。

先看 Web 服务,再看 80 和 443 端口,然后用 curl 做本机访问。接着检查 PHP 或后端进程、磁盘、内存,最后再去看 DNS、防火墙、安全组和 CDN。

这样查的好处是,每一步都在缩小范围。

而不是看到网站打不开,先重启 Nginx,再重启 MySQL,再重启 VPS,最后机器恢复了,却完全不知道问题到底出在哪里。

故障排查最重要的不是把服务器重新弄好,而是知道它为什么坏。

下一次再遇到同样的问题,处理速度会快很多。

赞(0)
未经允许不得转载;国外VPS测评网 » SSH明明能连,网站却突然打不开?我一般先查这6个地方
分享到