网站突然无法访问,确实让人着急。与其反复刷新页面或盲目重启服务器,不如沿着用户请求的访问路径,从最外层开始逐层排查。这个思路能帮你快速锁定问题到底出在哪个环节,省时省力。
遇到访问异常,先别急着登录服务器,第一步要分清是用户端还是服务端的问题。最简单的方法是切换网络环境测试,比如用手机流量访问。如果流量下正常,多半是本地路由器缓存或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分区读写非常频繁,说明物理内存已严重不足,系统在内存和磁盘间不断换页,性能会大幅下滑。这时应优先优化应用内存占用,或考虑升级服务器配置。
资源充足、端口开放,但网站依旧报错,这时要把注意力转向应用本身。进程存在并不代表服务功能完整,比如配置被误改、代码发布出错,都可能让网站处于异常状态。
以Nginx为例,错误日志通常位于/var/log/nginx/error.log,应用本身的日志(如PHP、Java、Python框架)也可能在项目对应的log目录里。查看最近日志时,重点关注502、503这类网关错误,往往指向后端服务未启动或崩溃。比如502 Bad Gateway大多意味着PHP-FPM进程挂了,重启该服务并检查其配置是否被改动即可。而500错误则可能涉及代码异常或配置文件语法问题,此时需要结合应用日志的堆栈信息来定位。
执行netstat -tlnp或ss -tlnp,确认网站所用端口(如80、443)是否正常监听。如果端口被占用但进程不对,说明服务可能被其它程序抢占,或存在多个实例冲突。还要关注进程数量是否正常,比如PHP-FPM的worker进程数量是否因配置问题而启动失败。一个常见坑是修改配置文件后忘了重启服务,导致新配置未生效。
很多网站故障的根源其实在数据库。前端页面能打开,但登录、查询等功能异常,往往提示你去看数据库状态。数据库连接数被打满、慢查询堆积或表锁死,都会让网站功能瘫痪。
以MySQL为例,执行show processlist;可以查看当前所有连接及正在执行的SQL。如果发现大量连接处于Sleep状态,或某个查询长时间未结束,就说明连接池或查询逻辑有问题。连接数打满时,新请求会排队等待,表现为页面卡顿或直接超时。这时可临时调大max_connections参数,但治本之策是检查应用是否未正确释放连接,以及是否有慢SQL拖累数据库。
开启慢查询日志(slow_query_log)后,执行时间超过阈值的SQL会被记录下来。常见的慢查询诱因包括:表数据量过大而未加索引、多表关联时驱动表选择不当、或查询条件中使用了函数导致索引失效。此外,执行show open tables where in_use>0;可查看是否存在表锁竞争。曾有一次线上事故,就是某个大批量更新语句锁住了核心表,导致全站写入失败,重启数据库后问题才暂时缓解,最终通过拆分更新批次彻底解决。
建议先做两步快速判断:一是换网络环境测试(比如用手机流量),确定是用户端还是服务端问题;二是执行nslookup检查域名解析是否指向正确的IP。这两步能排除掉最常见的外部因素,避免在服务器上白忙活。
这种情况大多与端口或应用层有关。ping通只说明服务器在线且ICMP协议正常,但网页访问走的是80/443端口。应先检查安全组和防火墙是否放行端口,再用telnet测试端口连通性。如果端口开着但网页仍无响应,则要查看Nginx或Apache等服务是否正常监听、日志是否有报错。
临时处理是调整数据库的max_connections上限,或重启数据库服务以释放原有连接,但这只是应急手段。根本解决要检查应用是否有连接泄漏、是否存在慢SQL或锁表问题。并建议开启慢查询日志、合理设置连接池大小,必要时做读写分离或增加从库分担压力。
网站无法访问的排查,讲究的是从外到内、逐层逼近:先分清用户端和服务端,再依次检查网络入口(解析、端口、防火墙)、服务器资源(CPU、内存、磁盘)、应用服务(进程、日志、端口监听),最后深入数据库(连接数、慢查询、锁表)。每一步都有明确的目标和判断依据。建议你在服务器上准备好常用的排查命令清单,平时多记录应用和数据库的基线状态,故障发生时就能更快地判断异常所在。