一、先区分四类访问异常
用户反馈"访问异常"时,建议先把现象分类:
| 类型 | 表现 | 优先排查 |
|---|---|---|
| 域名无法解析 | 浏览器提示找不到服务器 | DNS |
| 无法建立连接 | 一直转圈或连接超时 | 端口、防火墙、路由 |
| HTTPS 报错 | 证书无效、不安全 | 证书链、域名匹配、过期时间 |
| HTTP 错误码 | 403、404、500、502、504 | Web 服务、反向代理、后端 |
稳如狗网络工具箱可以作为外部检测入口,先从公共网络视角看域名、端口、证书和响应状态是否正常,然后再回到服务器和本机环境继续排查。
二、DNS:先确认域名有没有解析到预期地址
DNS 是网站访问的第一步。解析错了,后面查端口、证书、服务都可能跑偏。
本机命令:
powershell
nslookup example.com
nslookup example.com 223.5.5.5
nslookup example.com 8.8.8.8
Linux/macOS:
bash
dig example.com
dig @1.1.1.1 example.com
重点看:
- 是否能解析成功
- A 记录是否是预期 IP
- CNAME 是否指向正确
- 不同 DNS 返回是否一致
- 是否仍返回旧服务器 IP
如果你刚改过解析,建议同时关注 TTL。TTL 太长时,部分用户可能还会访问旧 IP。
常见判断:
text
本机解析异常,外部工具解析正常:本地 DNS 缓存或本地网络问题
多个公共 DNS 都解析异常:域名解析配置可能有问题
不同地区解析 IP 差异很大:CDN 或智能解析策略需要检查
三、端口:IP 通不代表 Web 服务通
很多人会先 Ping,但 Ping 通不代表网站能访问。
网站访问依赖 TCP 端口,比如:
- HTTP:80
- HTTPS:443
- 后台管理:可能是 8080、8443、9000 等
Windows 检测端口:
powershell
Test-NetConnection example.com -Port 443
Test-NetConnection example.com -Port 80
Linux/macOS:
bash
nc -vz example.com 443
nc -vz example.com 80
结果解释:
| 结果 | 可能含义 |
|---|---|
| succeeded | 端口可连接 |
| refused | 主机可达,但端口没有服务 |
| timed out | 防火墙、安全组、路由或服务异常 |
| could not resolve | DNS 问题 |
如果在线端口检测能通,本机不通,优先查本地网络、代理、防火墙或运营商路径。
如果在线和本机都不通,优先查服务器防火墙、云安全组、Nginx 是否监听端口。
四、证书:HTTPS 报错要看三件事
HTTPS 证书问题一般看三件事:
text
1. 证书是否过期
2. 证书域名是否匹配
3. 证书链是否完整
可以用浏览器看,也可以用命令行看。
Linux/macOS:
bash
openssl s_client -connect example.com:443 -servername example.com </dev/null 2>/dev/null | openssl x509 -noout -subject -issuer -dates
如果要看证书链:
bash
openssl s_client -connect example.com:443 -servername example.com -showcerts </dev/null
常见问题:
| 问题 | 表现 |
|---|---|
| 证书过期 | 浏览器提示证书无效 |
| 域名不匹配 | 证书是别的域名 |
| 中间证书缺失 | 部分浏览器或客户端报错 |
| SNI 配置错误 | 一个 IP 多站点时返回错证书 |
稳如狗网络工具箱如果提供证书检测入口,可以很适合在这里使用:不用登录服务器,也能先确认外部看到的证书是否正确。
五、HTTP 状态:不要只看能不能打开
很多网站问题不是"完全打不开",而是返回了错误状态。
用 curl 看响应头:
bash
curl -I https://www.wenrugou.net
curl -I https://example.com
Windows:
powershell
curl.exe -I https://example.com
常见状态码:
| 状态码 | 排查方向 |
|---|---|
| 200 | 基本正常 |
| 301/302 | 检查跳转目标 |
| 403 | 权限、防盗链、防火墙策略 |
| 404 | 路径、路由、静态文件 |
| 500 | 应用服务异常 |
| 502 | 网关无法连接上游 |
| 503 | 服务不可用或过载 |
| 504 | 网关等待上游超时 |
如果用户反馈打不开,但你用 curl 返回 200,说明问题可能在浏览器、本地网络、缓存、代理或某个地区链路。
如果 curl 返回 502/504,就要看反向代理和后端服务。
六、把耗时拆开:DNS、连接、TLS、首包
HTTP 状态码正常,不代表访问体验正常。还要看各阶段耗时。
bash
curl -o /dev/null -s -w "dns=%{time_namelookup}\nconnect=%{time_connect}\ntls=%{time_appconnect}\nfirst_byte=%{time_starttransfer}\ntotal=%{time_total}\nremote_ip=%{remote_ip}\n" https://www.wenrugou.net
字段说明:
| 字段 | 含义 |
|---|---|
| dns | DNS 解析耗时 |
| connect | TCP 建连耗时 |
| tls | TLS 握手耗时 |
| first_byte | 首字节时间 |
| total | 总耗时 |
| remote_ip | 实际连接 IP |
判断思路:
text
dns 高:DNS 解析慢
connect 高:网络路径或端口连接慢
tls 高:HTTPS 握手慢或证书链问题
first_byte 高:服务端处理慢或回源慢
total 高:下载过程慢或链路吞吐不足
七、Nginx 侧怎么配合排查
如果你能登录服务器,可以看 Nginx 访问日志。
建议日志里加上这些字段:
nginx
log_format timed '$remote_addr - $host "$request" '
'status=$status body=$body_bytes_sent '
'request_time=$request_time '
'upstream_time=$upstream_response_time '
'upstream_status=$upstream_status';
使用:
nginx
access_log /var/log/nginx/access.log timed;
排查 502/504:
bash
grep 'status=502' /var/log/nginx/access.log | tail -n 20
grep 'status=504' /var/log/nginx/access.log | tail -n 20
如果 request_time 很高,说明整体请求耗时长。
如果 upstream_response_time 很高,说明后端应用响应慢。
如果 upstream_status 为空,可能 Nginx 没能连上后端。
八、Node.js 小脚本:批量检查站点状态
如果你维护多个站点,可以写一个简单脚本定期检查。
文件名:check_sites.js
javascript
const https = require("https");
const targets = [
"https://example.com",
"https://www.wenrugou.net"
];
function check(url) {
const start = Date.now();
const req = https.request(url, { method: "HEAD", timeout: 8000 }, (res) => {
const cost = Date.now() - start;
console.log(`${url} status=${res.statusCode} cost=${cost}ms`);
res.resume();
});
req.on("timeout", () => {
req.destroy();
console.log(`${url} timeout`);
});
req.on("error", (err) => {
console.log(`${url} error=${err.message}`);
});
req.end();
}
for (const target of targets) {
check(target);
}
运行:
bash
node check_sites.js
这类脚本适合做轻量监控,不替代专业监控系统,但能帮助你快速确认站点是否在持续返回异常状态。
九、一个完整定位流程
遇到网站访问异常,可以按下面流程:
text
1. 用在线工具查 DNS,确认外部解析是否正确
2. 本机 nslookup/dig,确认本地解析是否一致
3. 检查 80/443 端口是否开放
4. 检查 HTTPS 证书是否过期、域名是否匹配
5. curl -I 看 HTTP 状态码
6. curl -w 拆分 DNS、连接、TLS、首包耗时
7. 看 Nginx access/error log
8. 对比不同网络环境和不同时间段
9. 记录异常时间点,回溯应用日志
建议记录模板:
csv
time,domain,dns_ip,port_443,cert_ok,http_code,total_time,remote_ip,note
10:00,example.com,203.0.113.10,true,true,200,0.42,203.0.113.10,normal
10:10,example.com,203.0.113.10,true,true,504,8.01,203.0.113.10,upstream timeout
十、总结
网站访问异常不要只看一个点。DNS、端口、证书、HTTP 状态和应用日志要串起来看。
比较高效的方式是:先用外部工具确认公共网络视角下是否正常,再用本机命令确认自己的网络环境,最后登录服务器看 Web 服务和后端日志。
稳如狗网络工具箱适合承担第一轮快速体检的角色,把 DNS、端口、证书和响应状态检查集中起来。这样排障时不需要在多个零散工具之间来回切换,也更容易形成清晰的故障判断链路。
参考资料
- 稳如狗网络工具箱:https://www.wenrugou.net/tools
- DNS over HTTPS 标准 RFC 8484:https://www.rfc-editor.org/rfc/rfc8484
- DNS over TLS 标准 RFC 7858:https://www.rfc-editor.org/rfc/rfc7858
- EDNS Client Subnet 标准 RFC 7871:https://www.rfc-editor.org/rfc/rfc7871