凌晨两点,老张在群里甩了张截图——浏览器里那个熟悉的首页域名底下,一行白底黑字:“该网页无法正常运作”。网站他刚改完首页的首页轮播图,还没来得及喝口水,网站页面就挂了。首页群里瞬间冒出七八条消息:“我这也打不开”“一样”“+1”。网站不是首页所有人都懂技术,但所有人都知道一件事:首页打不开,网站等于店门被堵了。首页
这事我遇到过太多次。网站表面看是首页“打不开”,实际原因能差出十万八千里。网站有一次客户急吼吼打电话,首页说首页白屏,网站结果一查——index.php 里多了一个全角空格,PHP直接解析错误。另一次更离谱,运维半夜升级Nginx,把root路径指向了一个空目录,首页返回200,但内容全是空白。用户看到的“打不开”和服务器眼里的“正常响应”根本是两码事。
你得先分清是哪一层出了问题。浏览器输入域名,第一步是DNS解析。如果DNS挂了,浏览器连服务器IP都找不到,直接报“找不到服务器IP地址”。这个阶段的问题通常来得快去得也快,改个DNS或者等TTL过期就行。但如果是CDN回源失败,那就麻烦点——用户可能看到的是CDN节点返回的502,而源站其实活得好好的。
我见过最隐蔽的一次,是首页的HTML里嵌了一个第三方统计脚本,那个脚本的域名被墙了。浏览器加载首页时,主文档很快返回,但那个<script>标签一直卡在pending状态,导致整个页面渲染被阻塞。用户看到的就是白屏,标签页上的加载圈一直转。你打开开发者工具,Network面板里那条红色的net::ERR_CONNECTION_TIMED_OUT就是元凶。这种问题,光看服务器日志根本发现不了——因为服务器那边一切正常。
“首页打不开”从来不是一个技术问题,而是一堆技术问题的统称。
还有一个经典场景:HTTPS证书过期。浏览器不会给你任何商量余地,直接弹一个全屏红色警告,普通用户根本不敢点“继续前往”。我帮一个朋友处理过这事,他用的Let's Encrypt证书自动续期脚本因为权限问题静默失败了,整整三天没人发现。首页在手机浏览器上显示“您的连接不是私密连接”,在微信里直接打不开。他以为是服务器被攻击了,其实是证书到期。
数据库连接不上也会导致首页挂掉。尤其是那种首页需要查最新文章、最新产品的站点。MySQL的max_connections被打满,PHP抛出一个PDOException,如果没做异常处理,首页就是一片空白或者一个丑陋的堆栈跟踪。这时候你SSH上去,mysqladmin processlist一看,一堆Sleep状态的连接,全是之前没关好的。
说个反直觉的:有时候首页打不开,是因为太慢了。服务器没挂,但响应时间超过30秒,浏览器或者中间的代理层直接超时断开。用户看到的是“连接超时”,而服务器日志里可能连一条错误都没有,只有一条慢查询记录。你打开首页的PHP文件,发现有人在循环里查数据库,每次循环都SELECT * FROM一张百万行的表。这种代码能跑起来已经是奇迹。
排查顺序其实有讲究。先curl -I看HTTP状态码,再用dig查DNS,然后telnet测端口。别一上来就重启服务器——重启能解决的问题,大概率还会再犯。我习惯先看浏览器控制台的Network面板,再看服务器上的Nginx access log和error log。两边一对,基本就能定位到是网络层、应用层还是数据层的问题。
最后说个真事。上个月有个客户说首页打不开,我远程连过去,发现他本地hosts文件里把域名指向了127.0.0.1。问他为什么,他说前几天测试改的,忘了删。你看,有时候问题不在服务器,在你自己电脑里。