这一章不是用来"读"的,是用来"查"的。网站一出问题,你就翻到这里, 先看现象、再看它属于哪一层、然后照着那一段一步步做。 全部内容都按现象分类,不需要你懂原理也能照着修。
怎么用这一章:先用第一节的表定位"是哪一层坏了",再到第二节找到对应的「故障编号」, 照着里面的步骤做。做完每一段,都用它给你的验证方法确认真的修好了,再关掉页面。
网站坏了的时候,新手最常见的反应是:重装系统、删掉重来、把能改的配置全改一遍。 结果往往是原来的问题没解决,还多出三个新问题——因为你在不知道原因的情况下动了更多东西。
正确的顺序只有两步:第一步,判断是哪一层断了;第二步,只动那一层。 一个网站从域名到你能看到的页面,中间只有四层,记住这四层,排错就有方向了。
| 层 | 包含什么 | 怎么判断是不是这层坏了 |
|---|---|---|
| 网络层 | 域名、DNS 解析、证书(HTTPS) | 域名根本没连到你的服务器:解析不出 IP、或解析到别人的 IP。用 nslookup 你的域名 一眼就能看出来 |
| 服务器层 | 服务器本身、端口、Nginx/PHP 等服务的运行状态、磁盘内存 | 服务器整个连不上:面板打不开、SSH 也连不上、所有端口都没反应 |
| 站点层 | Nginx 的站点配置、域名绑定、站点根目录里的文件、PHP/MySQL | 服务器通,浏览器能收到服务器回话,但回的是错误:404、403、502、500 |
| 页面层 | HTML、CSS、JS、图片、路径写法 | 页面能正常打开,只是样式错乱、图片破图、按钮没反应、文字是旧的 |
一句话诀窍:能收到服务器的"回话"(哪怕回的是 404),就说明网络层和服务器层是好的,问题在站点层或页面层。
下面这张表是本章的总入口。先在这里对号入座,再去第二节看详细的处理步骤。
| 你看到的现象 | 最可能是哪一层 | 第一个该做的动作 |
|---|---|---|
| 域名完全打不开、一直转圈、最后超时 | 网络层 或 服务器层 | nslookup 你的域名 看解析对不对,再 curl -I http://你的域名 看有没有回应 |
| 页面显示 404 Not Found | 站点层 | 检查根目录有没有 index.html、站点有没有绑定这个域名 |
| 页面显示"恭喜,站点创建成功" | 站点层(不算故障) | 上传你自己的 index.html 覆盖它 |
| 页面显示 502 / 503 | 站点层(PHP) | 给站点选 PHP 版本,然后重启 PHP |
| 页面显示 403 Forbidden | 站点层(权限/缺首页) | 看根目录有没有首页文件、权限是不是 755/644 |
| HTTPS 提示"不安全"、证书过期 | 网络层(证书) | 站点 → SSL,看证书覆盖的域名和到期时间,重新申请 |
| 面板打不开 | 服务器层 | SSH 里 bt default 看真实地址,并检查安全组有没有放行端口 |
| SSH 连不上 | 服务器层 | 去云控制台确认 IP 和运行状态,用网页版终端救急 |
| 解析不生效、解析到别的 IP | 网络层 | 核对域名服务商里的 A 记录(@ 和 www 两条) |
| 页面显示旧内容 | 页面层(缓存) | 先 Ctrl + F5 强制刷新,再确认文件到底传上去了没有 |
| 图片不显示、样式全乱 | 页面层(路径) | 用开发者工具看是哪个文件请求失败了 |
| 网站突然变慢、打不开 | 服务器层(资源) | df -h 和 free -m 看磁盘和内存 |
三个问题,10 秒定位大致方向:
① 昨天还好吗?今天动了什么?——如果今天改过东西,先把它改回去,八成就好了。
② 是整站都坏,还是只有某个页面坏?——整站坏往服务器层/网络层查;单页坏往站点层/页面层查。
③ 用 IP 和用域名,分别是什么结果?——这条最有用,见第七节。
下面第 01 到第 14 号故障,覆盖了新手 99% 会遇到的情况。 每一段都是同样的结构:常见原因(按可能性从高到低排) → 一步步处理 → 怎么验证修好了。 找不到你的现象?先回第一节的表里对号入座,再从最接近的那一段开始看。
| 编号 | 现象 | 最常见的原因 |
|---|---|---|
| 故障 01 | 域名完全打不开、转圈/超时 | 解析没生效、端口没放行、Nginx 没运行 |
| 故障 02 | 404 Not Found | 缺 index、域名没绑、路径写错 |
| 故障 03 | "恭喜,站点创建成功" | 只差上传内容 |
| 故障 04 | 502 / 503 Bad Gateway | 没选 PHP 版本、PHP 没启动 |
| 故障 05 | 403 Forbidden | 没有首页文件、权限错 |
| 故障 06 | HTTPS 不安全 / 证书过期 | 证书没签成、没续签、域名不匹配 |
| 故障 07 | HTTP 跳 HTTPS 后打不开 | 开了强制 HTTPS 但证书没配好 |
| 故障 08 | 面板打不开 | 端口没放行、面板服务停了 |
| 故障 09 | SSH 连不上 | 端口/密码/安全组/本地网络封端口 |
| 故障 10 | 解析不生效 / 解析到别的 IP | 记录写错、还没生效、缓存 |
| 故障 11 | 页面显示旧内容 | 浏览器缓存、文件没传上去 |
| 故障 12 | 图片/样式丢失 | 路径写错、大小写不一致 |
| 故障 13 | 留言板空白或报错 | 没开 PHP、目录不可写 |
| 故障 14 | 突然变慢 / 打不开 | 磁盘满、内存满、被攻击 |
nslookup 你的域名,看返回的 IP。@ 和 www 两条 A 记录是不是都指向你的服务器 IP,改完等几分钟(有时要几小时)。curl -I http://你的域名。超时/无回应 → 大概率是端口不通,去第 4 步;有回应(哪怕是 404) → 跳到故障 02。80、443 端口(临时可以把来源设成 0.0.0.0/0,排查完再收紧)。systemctl status nginx 看 Nginx 是否在运行;没运行就 systemctl start nginx,启动失败就看它的报错。怎么验证修好了:curl -I http://你的域名 返回 HTTP/1.1 200 OK 或 301 / 302(跳转),并且手机流量下也能打开页面。
404 的意思是:服务器活着、Nginx 也活着,但它找不到你要的东西。这是"好消息",说明问题只在站点层。要分三种情况看。
index.html(或 index.php),或者文件名写成了 Index.html 这种大小写不对的形式,或者多套了一层文件夹。www.你的域名,那么访问不带 www 的裸域名就会 404。download/工具.zip,但服务器上的文件名其实叫 工具合集.zip。index.html 就在这一层、大小是你的文件大小(不是几 KB 的默认页)。www 在 Nginx 眼里是两个不同的网站名。Photo.jpg 和 photo.jpg 是两个文件。怎么验证修好了:访问 https://你的域名 返回 200,浏览器标签上的标题显示的是你网站的标题,而不是 Nginx 的 404 页面。
这不是故障,是宝塔面板创建站点时送的默认页。看到它就说明: 域名解析、服务器、Nginx、站点绑定、SSL 全都没问题,只差最后一步——把你的网页文件传上去。
index.html → 重命名,改成 index-old.html。index.html(还有 avatar.svg、favicon.svg、404.html 等同目录要用的文件),传进站点根目录。Ctrl + F5 强制刷新。怎么验证修好了:刷新后看到的是你自己的页面;文件列表里 index.html 的大小从两三 KB 变成了你的文件大小(比如几十 KB)。
502 的意思是:Nginx 想找 PHP 要内容,但联系不上 PHP。
503 一般是服务不可用或过载。常见于"页面是 .php 结尾"的网站(比如留言板、WordPress)。
PHP Fatal error 之类的原文)。free -m 看内存;如果可用内存长期极低,考虑升级配置或关掉用不上的软件。nginx -t 检查语法,再 systemctl reload nginx 重载。怎么验证修好了:刷新页面不再出现 502;错误日志里不再新增同一条报错;如果需要 PHP 的页面能正常显示内容。
403 的意思是:服务器找到了这个位置,但拒绝给你看。常见于三种情况。
index.html / index.php),同时"目录索引"又是关闭的www)755、文件设为 644,所有者设为 www,并勾选"应用到子目录"。怎么验证修好了:访问首页返回 200,能看到页面内容;如果确实是想让人浏览目录,也可以在站点设置里打开"目录索引"。
www.你的域名,而你现在访问的是裸域名(或者反过来),导致"域名不匹配"www 版本)都勾上再申请。怎么验证修好了:地址栏显示锁形图标;点开锁能看到证书信息,里面的域名列表包含你访问的域名,有效期是未来几个月。
这是典型的"顺序搞错了":你打开了「强制 HTTPS」,但 443(HTTPS)这一侧其实没有可用证书。 于是浏览器被从 80 赶到 443,结果 443 给不出安全连接,页面就直接报错或打不开。
怎么验证修好了:用 http://你的域名 访问会自动跳到 https:// 并且正常显示页面,不再报错。
bt default,它会打印出面板的真实地址(含安全入口)、用户名和密码。bt 1(重启面板),再不行试 bt 16(修复面板)。ss -lntp 看看面板端口有没有在监听;再去云控制台安全组放行那个端口(建议只允许你自己的 IP,不要对全网开放)。怎么验证修好了:浏览器能打开面板的登录页,输入 bt default 给的账号密码能进后台。建议顺手把地址和账号密码记在密码管理器里,别只存在浏览器书签。
怎么验证修好了:SSH 客户端能正常登录,进得去以后 whoami 之类的命令能正常执行。
@ 和 www 搞混)nslookup 你的域名 和 nslookup www.你的域名,两条都要能解析到你的服务器 IP。@ 和 www 两条 A 记录的 IP。顺手确认域名的 DNS 服务器(NS)就是你正在编辑的这一家。怎么验证修好了:你自己的电脑、手机流量、以及任意在线 DNS 查询工具,查 你的域名 和 www.你的域名,返回的都是同一台服务器 IP。
Ctrl + F5 强制刷新,或者用无痕窗口、换手机流量再打开一次。怎么验证修好了:文件列表里的时间/大小与你本地文件一致,刷新后页面显示新内容。
index.html 的相对位置关系跟你写的一致。photo1.jpg。怎么验证修好了:开发者工具的 Network 面板里,图片请求的状态码从 404 变成 200。
data)不存在或没有写权限.php 页面(不要通过别的页面嵌套打开),这样报错信息会完整显示出来。755、所有者 www。怎么验证修好了:能正常提交一条内容,并且它出现在列表里;服务器上能看到程序自动生成的数据文件。
本来好好的,突然变慢,通常是资源被吃光了。优先怀疑:磁盘满、内存满、被人攻击或中了挖矿程序。
df -h 看磁盘占用,free -m 看内存。怎么验证修好了:面板监控里的 CPU、内存、带宽回落到正常水平,页面重新能秒开。
浏览器里的"开发者工具"是你排错时最有用的一双眼睛。 它能告诉你:浏览器到底请求了哪些文件、服务器回了什么、哪里报错了。 这些信息比"我打不开"精确一百倍。
怎么打开:在网页空白处右键 → 检查(有的浏览器写"审查元素")。
这个办法不依赖键盘,最稳。也可以按 Ctrl + Shift + I,或者从浏览器右上角菜单 → 更多工具 → 开发者工具进入。
如果按 F12 出来的是计算器、音量条之类的东西,那是笔记本键盘把 F12 设成了多媒体键,用上面的办法绕开就行,不用改任何设置。
Ctrl + F5 刷新页面。Doc 的那一条就是网页本身。| 状态码 | 意思 | 你该往哪查 |
|---|---|---|
200 | 正常,文件取到了 | 不用查 |
301 / 302 | 被跳到另一个地址 | 看跳到哪,是不是 http→https 或 www 的跳转 |
304 | 用的是浏览器缓存 | 强刷 Ctrl + F5 就能拿到最新的 |
403 | 拒绝访问 | 故障 05:权限、缺首页文件 |
404 | 找不到文件 | 故障 02:路径、文件名、域名绑定 |
500 | 服务器程序自己报错了 | 看错误日志里的 PHP Fatal error |
502 / 503 | Nginx 联系不上后端 | 故障 04:PHP 版本、PHP 服务 |
点开任意一条,右侧能看到它请求的完整地址(Request URL)—— 破图、样式丢失时,就把这个地址和服务器上的真实路径逐字对齐。
页面上的按钮点了没反应、特效不动、深色模式切换失效,答案基本都在这里。 红色的行就是错误,通常还会带上出错的文件名和行号。 把红色那几行原文复制下来搜索或提问,比描述"按钮不好使"有用得多。
在网页上右键 → 检查,会自动定位到你点的那块内容的 HTML; 右侧的 Styles 区域显示它的样式,你可以直接改动数值和颜色,页面立刻变化。 试出满意的效果,再把改好的值抄回真正的文件里。
重要提醒:这里的改动只存在于你自己的浏览器里,服务器上的文件一个字都没变,刷新一下就恢复原样。所以放心大胆地试。
猜十次,不如看一次日志。日志是服务器自己写的"流水账",记录谁来过、要了什么、出了什么错。 网站出问题时,日志里通常已经有答案了。
| 看什么 | 在哪 | 能看出什么 |
|---|---|---|
| 网站的访问日志 | 面板 → 网站 → 点站点 → 日志 → 访问日志 | 谁在什么时候访问了哪个地址、返回了什么状态码(大量 404 或 502 一眼可见) |
| 网站的错误日志 | 面板 → 网站 → 点站点 → 日志 → 错误日志 | Nginx 和 PHP 的报错原文,排错时最先看这个 |
| 面板自己的日志 | 面板 → 设置/安全 → 面板日志 | 面板登录、操作、定时任务有没有异常 |
| 系统日志 | 面板 → 文件,或命令方式查看 | 内存不足、服务被系统杀掉之类的系统级事件 |
tail -n 50 /www/wwwlogs/你的域名.log
tail 的意思是"只看文件结尾的若干行",因为最新的记录都在最后。
把 50 改成 200 就能多看一些。加上 -f 参数可以实时滚动显示(按 Ctrl + C 退出)。
在日志里找这些关键词,比从头读到尾快得多:
error、failed —— 任何错误
No such file or directory —— 文件不存在(对应 404、破图)
Permission denied —— 权限不够(对应 403、目录不可写)
upstream、php-fpm —— 后端 PHP 的问题(对应 502)
SSL_do_handshake —— 证书握手失败(对应 HTTPS 报错)
client intended to send too large body —— 上传的文件超过了限制
看日志的三步:①只看最后 20 行 → ②找带 error 或 failed 的行 → ③把那一整行原文复制下来去搜索或提问。不要试图理解整份日志,那是几千行。
这些命令在 SSH 终端(或宝塔面板左侧的「终端」)里执行。 不用背,复制粘贴即可,但要知道每条是干什么用的、看到什么才算正常。
| 命令 | 作用 | 正常的样子 |
|---|---|---|
nslookup 你的域名 |
看域名解析到哪个 IP | 返回你的服务器 IP(不是你服务器的 IP 就是解析错了) |
curl -I https://你的域名 |
看服务器到底回了什么 | 第一行是 HTTP/1.1 200 OK;如果是 404/502,就照故障表查 |
ls -la /www/wwwroot/你的站点目录/ |
看文件在不在、权限对不对 | 能看到 index.html 等文件,权限形如 -rw-r--r--、drwxr-xr-x |
nginx -t |
检查 Nginx 配置有没有写错 | syntax is ok 和 test is successful |
systemctl reload nginx |
重载配置(不中断访问) | 没有输出就是成功 |
systemctl status nginx |
看 Nginx 是否在运行 | 显示 active (running) |
ss -lntp |
看哪些端口正在监听 | 能看到 80、443,以及你的 SSH 和面板端口 |
df -h |
看磁盘使用率 | 各分区的 Use% 都别超过 90% |
free -m |
看内存够不够 | 可用内存不要长期接近 0 |
bt default |
查看面板地址、用户名、密码 | 打印出面板地址(含安全入口)和账号密码 |
关于 bt 系列命令:在终端里直接输入 bt 会打开一个菜单,
里面有重启面板、改密码、改端口、修复面板、查看面板日志等选项。
改端口、改密码这类操作之后,记得把新信息记下来,否则容易把自己关在门外。
排错能力的另一半,是把问题说明白。 同样一个故障,说清楚了别人三分钟能帮你定位;说不清楚,来回问十轮还在原地。 下面这个模板抄下来,以后提问照着填。
提问模板(五要素):
【环境】宝塔面板 + Nginx + Debian,域名是我的域名
【我做了什么】在站点设置里把 PHP 版本从"纯静态"改成 8.1 并保存
【现在什么现象】访问 https://我的域名/留言页 显示一片空白
【报错原文】粘贴你看到的原文(错误日志里的整行,不要转述)
【我已经试过】Ctrl + F5、重启了 PHP、换了浏览器
| 说法 | 为什么 | |
|---|---|---|
| 坏 | "我网站打不开了,怎么办?" | 不知道是哪个地址、什么现象、什么时候开始、改过什么,别人只能靠猜 |
| 好 | "昨天网站还正常。今天我在面板里把 PHP 版本从 7.4 改成 8.2 并保存,之后访问 https://www.我的域名/ 就显示 502。错误日志最后一行是:connect() failed (111: Connection refused) while connecting to upstream。我已经试过重启 PHP 和强制刷新。" |
有环境、有操作、有现象、有原文、有已试过的动作,定位几乎不需要再问 |
最关键的技巧:用你看到的报错原文去搜,不要用自己的话转述。 "网站打不开"搜不出东西,"connect() failed while connecting to upstream"一搜就有答案。
宝塔 站点 404 nginxnginx 502 php-fpm Connection refused宝塔面板 打不开 8888 安全组| 问题类型 | 去哪找 |
|---|---|
| 宝塔面板怎么操作 | 宝塔官方文档、宝塔论坛 |
| Nginx / 服务器配置 | Nginx 官方文档(英文但最准确) |
| HTML / CSS / JS 的基础概念 | MDN(中文版内容很全) |
| 具体的报错信息 | 直接搜报错原文,通常第一条就是答案 |
| 想知道某个效果怎么做 | 在别人的网页上右键 → 检查,照着抄写法 |
最后,把这一章压缩成三句话。以后网站一出问题,先别急着动手,先回答这三个问题—— 它们能帮你在一分钟内把范围缩小到某个层,后面的排查就只是照着第二节查表。
排错的黄金三问:
① 昨天还好吗?今天改了什么?
如果昨天正常、今天坏了,那 90% 的原因就是今天动过的那一处。先把改动改回去,问题往往立刻消失——这就是"改前先备份"的最大价值。
② 是整站都坏,还是只有某个页面坏?
整站打不开 → 往网络层、服务器层查(解析、端口、服务是否在运行)。
只有某个页面坏 → 往站点层、页面层查(路径、文件、程序报错)。
③ 用 IP 能打开吗?用域名能打开吗?
这一问最好用,四个组合直接给出答案:
· IP 能开、域名不能开 → 域名解析或域名绑定的问题(网络层 / 站点层)
· IP 和域名都不能开 → 服务器或服务本身的问题(服务器层)
· IP 打开是 404、域名能开 → 正常现象,说明站点只绑了域名,服务器好好的
· 两个都能开,但内容不对 → 站点层或页面层(文件、路径、缓存、程序)
把这一页加进浏览器书签吧。网站出问题的时候,你需要的不是"记住所有答案",而是知道去哪里查。