休闲

网站ping的通打不开

时间:2010-12-5 17:23:32  作者:休闲   来源:热点  查看:  评论:0
内容摘要:能ping通,网页却打不开——这事我遇到过不下十次。最离谱的一回,客户打电话说服务器挂了,我远程ping了一下,延迟12ms,丢包率0%。他那边浏览器转圈转了半分钟,最后蹦出个「ERR_CONNECT

能ping通,网站网页却打不开——这事我遇到过不下十次。通打最离谱的网站一回,客户打电话说服务器挂了,通打我远程ping了一下,网站延迟12ms,通打丢包率0%。网站他那边浏览器转圈转了半分钟,通打最后蹦出个「ERR_CONNECTION_TIMED_OUT」。网站

问题不在网络层。通打ICMP协议走得通,网站说明IP可达、通打路由正常、网站防火墙没拦ping。通打但HTTP是网站另一回事。ping用的是网络层,浏览器发请求走的是应用层,中间隔着TCP握手、TLS协商、DNS解析、端口监听这一整套流程。任何一环出问题,ping都照样通。

先查端口,别急着重启

最常见的情况:80和443端口没在监听。我习惯直接用telnet或curl -v试一下。比如telnet example.com 443,如果卡住不动然后超时,基本可以断定端口不通。有时候是服务根本没起来,nginx挂了、Apache没启动、Node进程被OOM killer干掉了。有时候是服务起来了但绑错了地址,只监听了127.0.0.1而不是0.0.0.0,本机curl能通,外面进不来。

还有一种情况特别隐蔽:云服务器的安全组。你ping得通,因为安全组默认放行ICMP。但80和443的入站规则没配,或者配错了源IP段。我有次帮人排查,折腾了四十分钟,最后发现安全组里443端口只对内网网段开放。改一条规则,五秒钟解决。

DNS也可能骗你

ping通的那个IP,和浏览器实际访问的IP,未必是同一个。ping走的是系统DNS解析,浏览器可能走了代理、走了DoH、或者缓存了旧的A记录。我见过一种情况:域名迁移后,本地DNS缓存还指向老服务器,老服务器还在线所以ping得通,但上面已经没有对应的站点了,返回一个默认页或者直接拒绝连接。nslookup和dig查一下,对比浏览器实际连的IP,很快能定位。

中间设备在捣鬼

有些防火墙或WAF只拦HTTP流量,ICMP放行。请求发出去了,在中间被重置或者丢弃。表现就是浏览器一直转圈,curl返回Connection reset by peer。这种情况ping完全正常,但TCP握手就被RST了。还有一种更阴的:MTU问题。小包能过,大包被分片后丢弃。ping默认发的是小包,所以通。浏览器请求头加上cookie、token,包一大就卡死。用ping -l 1472 -f测一下,如果大包不通,基本就是MTU的锅。

服务端自己在发呆

端口通、TCP握手成功、TLS也协商完了,但HTTP请求发过去之后服务端不响应。后端数据库连接池满了、PHP-FPM进程全卡死、Java应用GC停顿了几十秒。ping和端口检测都正常,因为操作系统层面还在收包,只是应用层没人处理。这时候看服务端日志比什么都快。我遇到过一回,磁盘inode满了,nginx能接受连接但写不了日志,请求全部hang住。ping延迟稳定在8ms,网页就是打不开。

排查顺序我一般这么走:先curl -v看卡在哪一步,是DNS、TCP、TLS还是等响应。然后ss -tlnp确认端口监听状态。再看安全组和iptables。最后查服务端日志和资源占用。别一上来就重启,重启能解决的问题,大概率还会再犯。

最近更新
热门排行
copyright © 2026 powered by 力不从心网   sitemap