网站突然无法访问,情绪容易着急,但与其反复刷新页面或直接重启服务器,不如沿着用户访问的路径,从最外层的网络入口开始,逐步向服务器内部推进。这种由外至内的排查思路,能帮你快速锁定故障的真正所在,避免把时间浪费在无关环节上。
遇到网站打不开,先别急着登录服务器看进程。第一步要分清问题出在用户端还是服务端。最直接的办法是切换网络环境测试,比如改用手机流量访问。如果流量环境下访问正常,多半是本地路由器缓存或DNS设置有异常;如果只有特定地区或特定运营商的用户访问异常,则要考虑链路拥堵或解析尚未完全同步的可能。
在电脑命令行中输入nslookup 你的域名,检查返回的IP是否与服务器当前实际公网地址一致。若解析结果为空,或指向一个早已弃用的旧IP,说明域名解析服务商处的A记录或CNAME配置有误。需要注意的是,修改DNS解析后存在生效延迟,通常需要几分钟到数小时不等。另外,如果网站启用了CDN,务必登录CDN控制台检查节点状态,很多无法访问的问题实际是回源失败所致。
服务器能ping通但网页打不开,这种情况大概率是端口被拦截了。云厂商的安全组规则和服务器本地的防火墙策略都需要放行80和443端口。在本地执行telnet 服务器IP 443,若提示连接超时,则基本可判定为防火墙拦截。此时应先登录云控制台检查安全组入方向规则,再返回服务器查看iptables或firewalld配置,排查顺序切忌颠倒。
页面响应迟缓、请求大量超时,通常与服务器资源耗尽密切相关。CPU持续满载、内存不足、磁盘空间告急或是带宽被占满,都会导致服务响应极慢。登录服务器后,依次执行top、free -h、df -h这三条命令,即可快速掌握系统负载、内存余量与磁盘占用情况。
在top界面按P键,使进程按CPU占用率排序,观察排名靠前的程序。常见的资源消耗大户包括:服务器被入侵后植入的挖矿程序、数据库缺少索引导致的慢查询堆积,以及恶意爬虫的疯狂抓取。可同步查看Nginx或Apache的访问日志,确认这些异常请求的来源IP和访问路径。例如,发现某个接口每秒被调用数百次,可直接临时封禁来源IP,或增加请求频率限制,压力即可明显下降。
磁盘使用率超过80%就应引起警惕。会话文件、运行日志或临时目录一旦写满,应用无法正常写入缓存,网站经常会出现500错误。清理过期日志和临时文件通常能释放空间。内存方面,若free -h显示swap分区的读写非常频繁,说明物理内存已严重不足,系统在内存和磁盘间不断换页,性能会大幅下降。此时应优先优化应用的内存占用,或考虑升级服务器配置。
资源充足、端口开放,但网站依旧报错,此时需要将注意力转向应用本身。进程存在并不等于服务可用,比如PHP-FPM进程虽然在跑,但工作进程数已全部占满,请求只能排队等待,页面表现就是长时间转圈然后超时。用systemctl status 服务名查看主进程状态只能算第一步,更关键的是查看应用日志。
以最常见的Nginx+PHP环境为例,先看/var/log/nginx/error.log,再检查PHP的日志文件,通常位于/var/log/php-fpm/目录下。日志里出现的常见错误有:数据库连接被拒绝、文件权限不足、某个扩展未加载等。举个例子,日志中频繁出现“Connection refused”且指向数据库端口,那就说明应用层是正常的,问题出在下层的数据库服务上,排查方向就此明确。
如果应用日志指向数据库,或者网站本身依赖数据库动态生成内容,那数据库的状态就是最后需要重点核查的环节。数据库出问题,网站往往表现为页面部分内容空白、登录失效或直接报数据库连接错误。
登录MySQL或PostgreSQL,执行SHOW PROCESSLIST;查看当前连接情况,若连接数接近上限,且大量连接处于Sleep或Waiting状态,说明连接池配置过小或存在未释放的连接。同时开启慢查询日志,查找执行时间超过1秒的SQL语句,这些慢查询往往是没有命中索引或数据量过大所致。例如,一条查询时间从0.01秒飙升到5秒,通常意味着全表扫描。为高频查询的字段添加索引,是见效最快的优化手段。
另一种常见情况是表锁或行锁长时间未释放,导致写入阻塞,进而拖垮整个应用。使用SHOW OPEN TABLES WHERE In_use > 0;可快速找出被锁定的表。若是主从架构,还需检查从库的同步延迟,主库写入正常但从库查询出的数据是旧的,用户会看到不一致的页面内容。排查时,务必结合应用配置中数据库连接串的指向,确认当前请求走的是主库还是从库,避免误判。
这种情况通常不是网络不通,而是应用层或防火墙层出了问题。优先检查80和443端口是否被安全组或iptables拦截,再查看Nginx或Apache进程是否存活。若端口通但页面报502或504,则多是后端PHP或数据库服务异常。
生效时间取决于TTL设置,短则几分钟,长则数小时。如果修改后本地仍无法访问,可在命令行执行ipconfig /flushdns(Windows)或sudo killall -HUP mDNSResponder(macOS)清理本地缓存。全球节点完全同步通常不超过48小时。
这说明问题没有被根治,多是资源逐步耗尽或存在定时任务导致的周期性故障。建议检查磁盘空间增长趋势、内存泄漏迹象以及crontab中是否有异常任务,同时关注应用日志中是否有周期性报错,找到根本原因后再针对处理。
从网络入口到数据库,按访问路径逐层排查,多数网站故障都能在十几分钟内定位。建议运维人员提前准备好常用命令清单和服务器基线信息,如正常的CPU占用率、内存余量、连接数等,这样异常出现时才能快速对比判断。排查结束时,别忘了记录故障原因和处理过程,形成文档,下次再遇到同类问题时就能直接参考。