提示连接超时无法连接到服务器怎么办
提示连接超时无法连接到服务器怎么办?先把这句话拆成四段:解析、连接、握手、应用。
四段停在哪一段,方向就定了。
| 现象 | 停在哪段 | 先查什么 |
|---|---|---|
| 报错提到域名解析失败 | 解析 | 记录与 DNS |
| 一直卡在正在连接 | 连接 | 端口与防火墙 |
| 卡在正在建立安全连接 | 握手 | 证书与 ssl 配置 |
| 页面空白很久后超时 | 应用 | 后端与负载 |
| 只有某几个地区超时 | 线路 | 本地与骨干 |
| 所有地区都超时 | 服务端 | 进程与防护 |
| 本机超时、外面能开 | 本机出口 | 代理与 hosts |
`` curl -o /dev/null -s -w 'dns=%{time_namelookup} conn=%{time_connect} tls=%{time_appconnect} ttfb=%{time_starttransfer} total=%{time_total}\n' https://你的域名 ``
哪个值异常大,就停在哪一段。这是全文最有用的一条命令。
解析阶段超时:连域名都没换成 IP
看 dns 那个数。
它接近 total:请求基本耗在解析上。
这时换一家 DNS 再问一次,或者直接 dig 你的域名 A +short。
dig 返回空,是记录的问题。
连接阶段超时:IP 知道了,连接没建立
看 conn 减 dns。
conn 是 0:连接根本没建起来。
先看端口在不在监听,再看安全组和防火墙放不放行。
这一步不用碰应用。
握手阶段超时:端口通了,加密没谈成
看 tls 减 conn。
tls 是 0 而 conn 有值:连接通了,握手没成。先分清范围:用宝塔拨测的网站测速跑一轮多节点,各地都拿不到状态码,那就是全网的事。
先看证书是否过期、域名是否对得上。
再用 echo | openssl s_client -connect 你的域名:443 -servername 你的域名 看它停在哪一步。
应用层超时:请求发出去了,没等到响应
看 ttfb 减 tls。
这一段长,说明在等后端。
各地都等不到,就跑一轮多节点看先看进程在不在、负载高不高、有没有慢查询。
ttfb 接近 total、total 又贴着超时时间,就是典型的应用层超时。
只在一部分地区超时:先看线路与调度
同样的域名,别的地方能开,这里开不了。
先在这里 ping 一次,看丢包和延迟。
再换一个运营商网络试一次。
两条都正常,才轮到查站点。
所有地区都超时:先看服务端与防护
多地同时不通,基本不是线路。
先看服务有没有在跑,再看有没有被防护策略拦掉。
拿不到状态码,问题就在服务端这一段。
这一步能定方向。别在这之前改配置。
本机超时、外面能开:先看本机出口
这台机器上有代理、有 hosts、有旧连接。
先关代理试一次,再看 hosts 里有没有手写的记录。
两样都干净,再看本机防火墙。
现在把那条报错的完整地址和发生时间记下来,在同一台机器上跑一次上面那条 curl,把输出留下来。