测试线上域名david.domain.com对应的服务器(Nginx1.12实现, 111.111.111.111) 通过中转机(111.111.111.112), 调用线下机器(192.201.4.53)上部署的微服务接口SpringCloud体系, 含Zuul Gateway, Eureka, MicroService)时.
发现对于中转机,无法ping通, 也无法telnet通.
类型 | 功能 | IP |
---|---|---|
线上Nginx | 反向代理 | 111.111.111.111 |
中转机 | 部署了nginx服务(80端口对外服务), 中转线上微服务请求至线下微服务体系中,win08服务器 | 111.111.111.112 |
微服务 | 线下提供微服务API | 192.201.4.53 |
MicroService访问方式 | 样例 |
---|---|
直接访问 | http://192.201.4.53:8005/personalRcommend/getHotSaleTest |
通过Gateway 访问 | http://192.201.4.53:8900/ds/rec/personalRcommend/getHotSaleTest 或http://192.201.4.53:8900/ds/rec/info(仅获取微服务简短服务可用与否的信息) |
测试下来,没有问题, 说明底层微服务状态良好, 排除线上微服务服务异常问题.
在浏览器中输入, 走中转机服务器路径的如下接口URL:
http://111.111.111.112/ds/rec/info
发现服务异常, 说明中转机至线下的http请求(底层为tcp协议)有问题. 但通过ping(底层为icmp协议)命令,如下, 可以ping通线下机器.
G:\Software\nginx-1.14.2>ping 192.201.4.53
正在 Ping 192.201.4.53 具有 32 字节的数据:
来自 192.201.4.53 的回复: 字节=32 时间<1ms TTL=61
来自 192.201.4.53 的回复: 字节=32 时间<1ms TTL=61
来自 192.201.4.53 的回复: 字节=32 时间=1ms TTL=61
来自 192.201.4.53 的回复: 字节=32 时间<1ms TTL=61
192.201.4.53 的 Ping 统计信息:
数据包: 已发送 = 4,已接收 = 4,丢失 = 0 (0% 丢失),
往返行程的估计时间(以毫秒为单位):
最短 = 0ms,最长 = 1ms,平均 = 0ms
说明, 中转机可以访问到测试机器, 但通过中转机的nginx服务(入站规则:80端口)无法访问到线下资源.
中转机nginx(windows版本)配置:
upstream micro_service_server {
server 192.201.4.53:8900;
}
server {
#......
location /ds/rec/ {
proxy_pass http://micro_service_server/ds/rec/;
}
#......
}
线上服务器上, 执行telnet到中转机nginx服务的操作:
[david_admin@server111-111 ~]$ telnet 111.111.111.112 80
Trying 111.111.111.112...
telnet: connect to address 111.111.111.112: Connection timed out
telnet(底层为tcp协议)失败, 说明线上连接至跳板机的80端口有异常.
线上Nginx(Linux版本)配置:
location /ds/rec/ {
proxy_pass http://111.111.111.112/ds/rec/;
}
②/③等排查步骤, 都说明了中转机在使用tcp服务(连接 或 端口)提供承上启下的中继服务时,出现异常. 考虑到中转机在nginx上使用80端口对外提供服务, 故猜想是否可以在中转机侧配置防火墙入站规则, 使得使用80端口的http请求可以被放行.
解决方案:
Windows防火墙设置端口白名单
详见文末"参考列表".
配置之后测试, 发现问题得以解决, 线上telnet 中转机的 80端口 已正常, 但还是无法ping通 中转机.
注意:
由于telnet 和 ping 走了不同的网络协议, 本例中出现不能ping通中转机, 但能telnet通中转机的80端口的情况是正常的.
①. 不同软件的协议使用情况
ping / telnet / tracert 命令使用的协议栈, 如下 :
协议名 | 使用协议类型 | 使用样例 |
---|---|---|
telnet | tcp | telnet 192.168.1.100 80 |
ping | icmp | ping www.csdn.net 或ping 192.168.1.101 |
tracert | icmp | tracert 192.168.1.102 |
Tips:
ICMP全称Internet Control Message Protocol,中文名为因特网控制报文协议。它工作在OSI的网络层,向数据通讯中的源主机报告错误。
②. TCP在网络模型层中的位置
OSI 模型把网络通信的工作分为 7 层,从下到上分别是物理层、数据链路层、网络层、传输层、会话层、表示层和应用层。
OSI 只是存在于概念和理论上的一种模型,它的缺点是分层太多,增加了网络工作的复杂性,所以没有大规模应用。后来人们对 OSI 进行了简化,合并了一些层,最终只保留了 4 层,从下到上分别是接口层、网络层、传输层和应用层,这就是大名鼎鼎的 TCP/IP 模型。
参考列表
-Windows2008防火墙怎么设置端口例外
-OSI网络七层模型简明教程