1、问题发生背景:
用户搭建网络环境,公网服务器"A"上的某一程序访问内网的服务器"B"的某一程序时(由于内外网不通,故将“B”在服务器“A”做了映射,服务器"A"、"B"均为linux系统,图中为映射后地址),发送请求返回如下:
2、解决:
带着上述报错开始面向百度寻求答案,搜寻了一堆“xxx...failed to respond...xxx”的相关解决方案,其中包括HTTP连接池的时效问题(一方断开连接后,另一方还在继续使用上次连接)、以及nginx的keepalive_timeout分配过大的情况等(上述两种解决方案自行百度),但都无法解决。
于是我开始think,开始用笨方法一点点排查:
- 从"A"向"B"telnet(从本机到目标服务器的某一端口发请求,看看是否连通)。结果:十分畅通!从telnet结果来看,"A"是可以访问到"B"的程序的。
- 使用curl命令从"A"向"B"发送post请求,结果:长时间无反应。
curl -d "serviceName=queryMedInfoByAuthCode¶ms={'authcode':'4ba66c25-9669-461b-b8c4-cf337fe5e46c','yybh':'5990306'}" "http://173.18.3.249:8082/serviceProxy.do"
- 使用上述curl命令从服务器"B"直接向本机发送同样请求,结果:马上返回信息。
问题总结:结合123可以看出,服务器"B"上运行的程序没有问题,curl命令没有问题;从1来看,网络没有问题;于是!!我想到福尔摩斯的一句名言:“排除所有不可能,剩下那个多不可思议,都是实事真相”,那就是:::网络映射错误!即"A"里面的程序在"B"中映射后的地址有误。
3、后记
最后网络同事确认,果然是映射地址有误,重新映射后便解决了。
问题很小很小,虽然不是网络上流行的错误,但也是通过错误学会了那几种情况收获也是很大滴。