网站打不开怎么排查?IP、DNS、端口、状态码四步定位
遇到「网站打不开」,刷新和换浏览器通常解决不了问题。有效的做法是按层往下查:IP 地址对不对、域名解不解析、端口开没开、服务返回了什么状态码。这篇给出每一步的判断依据。
- 排查网络问题要按 IP → DNS → 端口 → HTTP 状态码的顺序逐层往下,跳过任何一层都可能得出错误结论
- 10.x、172.16-31.x、192.168.x、127.x 都是私有或回环地址,不可能作为公网服务器地址被访问
- DNS 记录类型决定用途:A/AAAA 是地址记录、CNAME 是别名、MX 管邮件、TXT 常用于域名所有权验证
- 端口不通只有两种原因:防火墙拦截或服务没在监听,先用端口速查表确认该服务的默认端口号
- HTTP 状态码自己会指路:4xx 是请求侧问题、5xx 是服务端问题,502 与 504 通常指向反向代理或上游超时
- WebSocket 测试由浏览器直连目标服务器、消息不经过本站,可用来验证 wss 证书与鉴权头是否正常
#先确定问题出在哪一层
网络问题的排查顺序是固定的:地址 → 解析 → 端口 → 应用协议。 从下往上查,因为上层依赖下层,下层不通时上层的报错往往是误导。
比如浏览器报「连接超时」,可能是域名没解析、也可能是解析正常但端口被防火墙拦了。只看浏览器提示无法区分,必须分层验证 —— 每一层要回答的问题并不相同:
#第一步:地址本身就是错的
私有地址和回环地址不可能被公网访问,如果服务器地址落在这些网段里,问题就到此为止了。
以下网段是保留给内网的,任何公网请求都到不了:
| 网段 | 用途 |
|---|---|
10.0.0.0/8 | 私有网络 |
172.16.0.0/12 | 私有网络 |
192.168.0.0/16 | 家庭与办公局域网 |
127.0.0.0/8 | 本机回环(localhost) |
169.254.0.0/16 | 链路本地地址,通常是 DHCP 拿不到地址时的兜底 |
反过来,如果查到的地址是 169.254. 开头,说明这台机器根本没拿到有效的 IP,此时任何网络请求都会失败。
用 IP 地址查询 时可以直接看到地址类型判定。IPv6 地址还能顺便看展开与压缩两种写法是否等价 —— fe80::1 和 fe80:0000:0000:0000:0000:0000:0000:0001 是同一个地址。
#第二步:域名解析对不对
DNS 问题的典型特征是「用 IP 能访问、用域名不行」,只要出现这个现象就应该直接去查解析记录。
不同记录类型解决不同问题,查错了会误判:
| 记录类型 | 作用 | 查它的典型场景 |
|---|---|---|
| A | 域名 → IPv4 地址 | 网站打不开 |
| AAAA | 域名 → IPv6 地址 | 只有部分网络能打开 |
| CNAME | 域名 → 另一个域名 | 用了 CDN 或第三方服务 |
| MX | 邮件服务器 | 收不到邮件 |
| TXT | 文本记录 | 域名所有权验证、SPF |
| NS | 权威域名服务器 | 确认解析由谁负责 |
改完解析不要立刻期待生效。记录上的 TTL 值就是「旧值还能被缓存多久」,TTL 3600 意味着最坏情况要等 1 小时。排查时看到的「解析结果不对」,可能只是本地或中间 DNS 还在用缓存。
#第三步:端口通不通
端口不通只有两个原因:防火墙拦截,或服务根本没在监听。 先确认端口号本身没搞错。
很多服务的默认端口容易被记混:
| 服务 | 默认端口 |
|---|---|
| HTTP / HTTPS | 80 / 443 |
| SSH | 22 |
| MySQL / PostgreSQL | 3306 / 5432 |
| Redis | 6379 |
| MongoDB | 27017 |
用 端口大全 可以按端口号或服务名反查,它收录了 68 个常见服务端口,覆盖数据库、中间件、容器等场景。确认端口号之后,再去服务器上核对防火墙规则与监听状态。
#第四步:服务返回了什么
HTTP 状态码是排查里信息量最大的一层,因为它直接告诉你问题在请求侧还是服务端。 记住类别划分就能快速判断:
- 2xx 成功:请求正常处理,问题可能在页面逻辑或前端资源
- 3xx 重定向:注意是否有重定向环路,或跳到了 http 导致证书警告
- 4xx 客户端:401 未认证、403 无权限、404 路径不对、429 请求过频
- 5xx 服务端:500 代码异常、502 网关收到无效响应、503 服务不可用、504 上游超时
502 和 504 几乎都指向反向代理这一层,而不是业务代码。 502 是代理连上了后端但收到无效响应(后端进程崩了或端口配错),504 是代理等后端超时(后端处理太慢或死锁)。先看后端进程还在不在,比翻代码更快。
分类细节可以在 HTTP 状态码 里逐个查,它收录了 1xx 到 5xx 的常用状态码与中英文说明。
#长连接问题要单独测
WebSocket 的握手虽然建立在 HTTP 之上,但它的失败原因和普通请求完全不同,用 HTTP 工具测不出来。
常见差异有这几个:
- 握手需要
Upgrade头,中间的代理可能把它剥掉 wss://要过证书校验,自签证书会直接失败- 很多网关默认不支持长连接,会把升级请求当普通 HTTP 处理
- 浏览器对跨域 WebSocket 的校验方式与 AJAX 不同
用 WebSocket 测试 可以直接输入 ws:// 或 wss:// 地址验证:
- 先连一个公开的 echo 服务确认工具能用
- 再换成目标地址,观察握手是否成功
- 连接成功后发一条消息,看是否能收到回包
- 注意日志里的状态变化 —— 连上后立刻断开通常意味着鉴权失败
这条连接是浏览器直连目标服务器的,消息不经过本站。如果你需要验证的是「只有特定 header 才能通过」的场景,浏览器的 WebSocket API 不支持自定义 header,这类测试只能用命令行工具或后端脚本完成。
#什么时候该用哪个工具
| 你想做的事 | 用哪个 | 说明 |
|---|---|---|
| 确认 IP 是公网还是内网 | IP 地址查询 | 同时给出 IPv4 进制换算与 IPv6 展开压缩 |
| 查域名解析到了哪里 | DNS 查询 | 支持 A/AAAA/CNAME/MX/TXT/NS/SOA,显示 TTL |
| 确认某个服务用哪个端口 | 端口大全 | 68 个常见端口,可按号或按服务名反查 |
| 搞清返回码什么意思 | HTTP 状态码 | 1xx-5xx 中英文含义与说明 |
| 调试长连接接口 | WebSocket 测试 | 连接、收发消息、日志记录 |
| 提取日志里的 IP 或邮箱 | 正则表达式测试 | 日志分析场景常用 |
#常见问题
#网站打不开,但用 IP 能打开,是什么原因?
这是典型的 DNS 问题。域名没有解析到正确地址,或者解析记录被 CDN、中间 DNS 缓存了旧值。用 DNS 查询 查一下 A 记录和 TTL,对比服务器实际 IP。如果是刚改过解析,等 TTL 过期再测。
#为什么有些网络能打开、有些打不开?
常见原因有三个:一是域名同时配了 A 和 AAAA 记录,但只有 IPv4 通(或反过来);二是用了 CDN,不同地区解析到不同节点,某些节点异常;三是本地 DNS 污染。先查 AAAA 记录,再换网络环境对比。
#端口不通是防火墙问题还是服务没起来?
两个都要验,但顺序是先看服务再看防火墙。在服务器上确认进程在监听(netstat 或 ss 能看到对应端口),再用外部工具测连通性。如果服务在监听但外部连不上,就是防火墙或安全组的问题。
#502 和 504 有什么区别?
502 Bad Gateway 是反向代理收到了无效响应 —— 通常是后端进程崩了或端口配错;504 Gateway Timeout 是代理等待后端超时 —— 通常是后端处理太慢或卡住了。前者要检查后端进程,后者要查性能与超时配置。
#WebSocket 连接建立后立刻断开是什么原因?
最常见的是鉴权失败:服务端校验 token 或 header 不通过时会主动关闭连接。其次是协议版本不匹配,或者中间的网关不支持长连接、把它当普通 HTTP 请求处理掉了。先用公开 echo 服务确认网络与工具正常,再逐项排查鉴权与网关配置。
本文提到的工具
IP 地址查询在线工具,解析 IPv4 与 IPv6 地址,识别公网/私有/回环/组播等类型,IPv4…
立即使用 →DNS 查询DNS 查询在线工具,支持 A、AAAA、CNAME、MX、TXT、NS、SOA、SRV、CAA 记录…
立即使用 →WebSocket 测试WebSocket 测试在线工具,输入 ws/wss 地址一键连接,支持消息收发、连接状态与日志记录,…
立即使用 →HTTP 状态码HTTP 状态码查询在线工具,收录 56 个 1xx-5xx 常用状态码的中英文含义与说明,按类别速查…
立即使用 →端口大全端口大全在线工具,68 个常见服务端口速查表(FTP/SSH/Web/数据库/邮件/中间件/容器),支…
立即使用 →