网站突然访问不了,确实是件让人着急上火的事。与其反复刷新页面或者直接重启服务器,不如保持冷静,按照用户访问网站的路径,从最外层开始,一步步向内排查。这种系统化的排查方法能帮你快速定位故障点,少走很多弯路。
网站打不开,第一步要做的不是登录服务器,而是先弄清楚问题是出在你自己这边,还是出在服务器那边。最简单有效的方法是换一个网络环境试试,比如拿出手机,关闭Wi-Fi,直接用流量访问。如果用流量能正常打开,那问题多半出在本地路由器缓存或DNS设置上。反之,如果只有某些地区或某些运营商的用户访问异常,那就要考虑链路拥堵或者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进程还在,但配置文件的语法错了,它可能已经拒绝接收新请求;又比如PHP-FPM没有响应,但进程并没有退出,页面就会一直转圈。查看nginx -t可以验证Nginx配置是否正确,检查PHP-FPM的状态页能看出它是否还在正常处理请求。应用日志永远是排查这类问题最可靠的线索,tail -f /var/log/nginx/error.log这条命令能让你实时看到应用新产生的错误记录。
网站能打开首页,但一登录或者查询数据就报错,那问题很可能在数据库这一层。数据库连接数被打满、慢查询拖慢整个业务、主从同步中断,这些都是常见的故障类型。使用mysql -u用户名 -p登录数据库后,执行show processlist;能列出当前所有的数据库连接,看看是不是有大量连接卡在发送数据或者写日志的状态。如果发现异常,可以用kill 进程ID;来结束掉那些空闲太久或者执行时间过长的连接,让数据库先喘口气。
重启服务器有时能解决某些临时性的故障,比如内存泄漏或进程死锁,但它治标不治本。如果是磁盘写满、数据库连接数耗尽这类持续存在的隐患,重启后问题很快会再次出现。建议先定位到具体原因再处理,把重启当作最后的手段。
这种情况说明网站本身是正常的,问题出在对外访问的链路上。常见的原因包括:服务器防火墙或云安全组误封了外部IP段、DNS解析还没有在全球范围内同步生效、或者是CDN节点故障导致外部用户回源失败。可以先检查CDN状态,再对照安全组策略逐步排查。
502 Bad Gateway通常意味着网关或代理服务器收到了无效响应,最常见的原因就是PHP-FPM或后端应用服务挂了,需要检查后端服务的运行状态并重启。504 Gateway Timeout则往往是代理等待后端响应超时,多数与数据库慢查询或应用逻辑阻塞有关,需要顺着慢查询日志和应用日志去定位具体卡点。
网站无法访问的原因虽然是五花八门,但只要按照网络、服务器、应用、数据库这条链路逐层往下排查,大多数问题都能在半小时内找到根源。排查过程中要养成随手查看日志的习惯,不要凭感觉瞎猜。掌握了这套排查思路,下次再遇到网站打不开,你就能从容冷静地一步步解决,而不是干着急了。