网站打不开怎么排查?按「域名→服务器→端口→程序」四层定位
网站打不开,第一个要做的不是重装环境,而是判断问题出在哪一层。绝大多数情况下,责任层只有一层,找准了改一处就好;盲目重启、重装、换机,只会把问题越搅越乱。
把链路拆开,从外到内一共四层:
| 层次 | 检查什么 | 典型判断依据 |
|---|---|---|
| 1. 域名解析 | 域名是否指向正确的服务器 IP | ping 域名能解析出 IP 且和服务器一致 |
| 2. 服务器状态 | 服务器是否存活、能否登录 | SSH 能连上、ping 服务器 IP 通 |
| 3. 端口放行 | 80/443 是否被防火墙或安全组挡住 | 宝塔端口规则状态、netstat 有监听 |
| 4. Web 服务与程序 | Nginx/Apache 与后端程序是否正常 | nginx -t、错误日志、HTTP 状态码 |
下面按这个顺序逐层做。
第一层:先确认域名解析对不对
要排除的:域名根本没指向这台服务器,或者指向了旧 IP。
# 看域名解析到什么 IP
ping -c 4 yourdomain.com
ping 会把域名解析成 IP 并显示在输出第一行。拿这个 IP 和你的服务器公网 IP 对一下:
- IP 不一致 → 问题在 DNS。去域名服务商检查 A 记录,改完等生效(TTL 内)。
- 提示无法解析域名 → 记录没添加或填错了。这种情况浏览器会报
DNS_PROBE_FINISHED_NXDOMAIN之类的错误,和服务器毫无关系,改服务器是白费力气。 - IP 一致 → 继续往下。
换域名访问试试也是个快速验证:如果用 IP 能打开、用域名打不开,那基本可以锁定在解析或域名绑定环节。
如果解析没问题但仍打不开,再确认站点里有没有绑定这个域名:宝塔面板 网站 → 点站点域名 → 在域名管理窗口里核对。
第二层:确认服务器本身是否活着
服务器都连不上,后面几层不用看了。
# 1. 测服务器是否可达
ping -c 4 你的服务器IP
# 2. 直接 SSH 登录试试
ssh root@你的服务器IP
ping不通,SSH 也连不上 → 服务器可能欠费停机、被云厂商封禁,或者宿主机故障。先去云服务商控制台看实例状态。注意部分厂商默认禁 ping,所以 ping 不通不代表服务器挂了,以 SSH 能否登录为准。- SSH 能登录 → 服务器是活的,问题在上面几层。
登录后,如果面板也一并打不开,可以用命令查面板信息:
/etc/init.d/bt default
这条命令会输出面板地址、用户名、密码。如果面板服务本身异常,用 bt 命令处理:
bt
在菜单里选择 1 重启面板服务,或选 16 修复面板。
提示:面板打不开和网站打不开是两件事。面板走自己的端口(默认 8888),网站走 80/443,是两套独立服务。面板能打开、网站打不开,说明服务器和网络都没问题,直接跳到第四层去查网站本身。
第三层:确认端口有没有放行
这是「网站打不开」最常见的原因,而且经常被忽略——容易在宝塔防火墙里放行了,却忘了云服务商的安全组。
看端口在服务器上有没有被监听
netstat -tunlp | grep 80
有输出说明有服务在监听 80 端口。没有任何输出,说明 Web 服务没起来,问题在第四层。
看宝塔的端口规则状态
宝塔面板 安全 → 系统防火墙 → 端口规则列表,每条规则的状态含义是:

| 状态 | 含义 | 怎么处理 |
|---|---|---|
| 正常 | 端口已放行且服务在监听 | 无需处理 |
| 未使用 | 端口无服务监听,或服务未启动 | 去检查服务是否安装、是否启动 |
| 外网不通 | 规则生效了,但外部访问仍不通 | 按下方的四种原因逐一排查 |
状态是**「外网不通」**时,宝塔官方给出四种可能:
- 服务未监听外网 IP(比如只监听了
127.0.0.1) - 云服务商安全组未放行
- 规则未生效——可以尝试删除该规则后重新添加
- 该端口本就不需要外部访问,可以忽略
去云服务商控制台放行
这一步在宝塔面板里做不了,必须去云厂商控制台:
- 腾讯云:轻量应用服务器在「管理实例防火墙」里放行;云服务器在「安全组」里添加规则
- 阿里云:ECS 在安全组里放行,轻量应用服务器在防火墙里放行
- 华为云:云服务器在「安全组规则」里配置
需要放行的常用端口:
| 端口 | 用途 | 是否必须 |
|---|---|---|
| 80 | HTTP | 必须 |
| 443 | HTTPS | 用 HTTPS 就必须 |
| 8888 | phpMyAdmin(面板默认端口也是 8888) | 不用可不放行 |
| 21 / 20 | FTP | 用 FTP 才需要 |
| 3306 | MySQL 外部连接 | 不需要外连数据库就别放 |
注意:3306 不要随便对全网放行。数据库暴露在公网是被入侵的高发原因,确实需要远程连接时,来源限制为固定 IP 更安全。
第四层:查 Web 服务和程序
走到这里,域名、服务器、端口都是通的,问题在服务或程序本身。
先看 HTTP 状态码,它能直接告诉你方向
用 curl 拿到响应头,状态码就是线索:
curl -I http://yourdomain.com
| 状态码 | 含义 | 往哪查 |
|---|---|---|
| 200 | 正常 | 那就不是服务端问题,查本地网络或浏览器缓存 |
| 301 / 302 | 跳转 | 跳转目标是否可达、是否形成循环 |
| 403 | 拒绝访问 | 目录权限、网站加固规则、防篡改插件 |
| 404 | 找不到页面 | 站点根目录、默认文档、伪静态规则 |
| 502 / 504 | 后端无响应或超时 | Nginx 通了,后端程序(PHP/Node/Python)挂了 |
| 一直转圈无响应 | 连接超时 | 回到第三层查端口 |
特别注意 502/504:这两个码说明 Nginx 本身是好的,反向代理过去之后后端没给响应。所以不是“网站打不开”,而是“网站背后的程序挂了”,重点查后端进程、端口和内存占用。
检查服务状态和配置
# 检查 Nginx 配置语法(改过配置后必做)
nginx -t
配置有语法错误时 Nginx 无法正常加载。如果站点是 PHP 项目,还要确认 PHP-FPM 是否在运行;是 Node/Python 项目,检查反向代理指向的后端端口是否和程序实际监听的一致。
看站点日志定位具体报错
宝塔面板 网站 → 点站点域名 → 弹窗左侧导航选 网站日志,分三块:

- 响应日志:记录每个请求的客户端 IP、请求时间、请求方法、资源路径、响应状态码、响应字节数、Referer、User-Agent。看得出来是谁在访问、返回了什么码。
- 错误日志:网站运行中发生的错误信息,定位程序问题主要看这里。

- 日志安全分析:异常请求和攻击特征分析。

说明:响应日志里的 IP 归属地 显示是企业版功能。非企业版能看到 IP,但不显示归属地。
还要确认默认文档
如果访问首页返回 404 或目录列表,检查 默认文档 配置。

宝塔创建的站点默认包含这几个:index.php、index.html、index.htm、default.php、default.htm、default.html。网站根目录里没有这些文件名,访问根路径自然就找不到入口。
一套可直接照做的排查顺序
总结成清单,下次直接按顺序执行:
# 1. 域名解析对不对
ping -c 4 yourdomain.com
# 2. 服务器活不活
ping -c 4 服务器IP
ssh root@服务器IP
netstat -tunlp | grep 80
# 3. HTTP 返回什么
curl -I http://yourdomain.com
配合面板上的两处检查:安全 → 系统防火墙 看端口状态;网站 → 站点 → 网站日志 看错误日志。
四层里哪一层断了,问题就在哪一层。能定位到层,就已经解决了排查里最难的部分。
补充:让故障先被通知到,而不是先被用户发现
网站打不开这类问题,被动等用户反馈已经晚了一步。宝塔面板 网站 → 点站点域名 → 网站告警,可以配置拨测告警:

按设定周期主动探测站点可用性,异常时通过邮件、微信、钉钉等渠道推送。
两种检测方式:
- 本地测试:本机发请求,结果可能受本机网络影响
- 多节点测试:通过宝塔部署在全国的多个节点探测,覆盖更全面(需企业版)
提示:排查类文章只能解决“已经坏了怎么办”。真正省事的是在坏的第一时间收到通知,尤其是在夜里和周末。
常见问题
宝塔面板能打开,但网站打不开,是哪里出了问题?
面板和网站是两套独立服务。面板走它自己的端口(默认 8888),网站走 80/443。如果面板能开而网站不能,说明服务器本身没问题,问题在网站这一侧——先看 80/443 端口有没有放行,再看 Nginx/Apache 是否在运行,最后看站点配置和程序日志。
为什么本机 curl 能访问,外网却打不开?
最常见的原因是云服务商安全组没有放行 80/443。本机请求走的是回环地址,不经过安全组,所以能通;外网请求要先过安全组才能到服务器。其次检查 Web 服务是否只监听了 127.0.0.1,这会导致同样的现象。
宝塔防火墙里端口状态显示「外网不通」是什么意思?
表示端口规则本身已生效,但外部访问仍不通。宝塔给出四种可能:服务未监听外网 IP、云服务商安全组未放行、规则未生效(可尝试删除后重新添加)、以及该端口本就不影响访问时可以忽略。
网站返回 502 是什么问题?
502 说明 Nginx 本身是通的,但它把请求转发给后端(PHP-FPM、Node、Python 等)时没拿到正常响应。所以 502 不是「网站打不开」,而是「网站背后的程序挂了」。重点查后端服务是否在运行、端口是否正确、以及站点错误日志里的具体报错。
改了面板端口后连不上面板了怎么办?
通过 SSH 登录服务器执行 bt 命令,选择 8 改回原来的端口。注意云服务器需要提前在安全组放行新端口,否则改完就进不去了。