网闸差点背锅
有一个服务,需要请求接口。大概流程是前台->网闸->反向代理->服务A->本地远程服务B->外部远程服务。
整个流程很长,但是很奇怪,前台返回一直是200,但返回为null。
一度以为是网闸的锅,找原因也找了很久。
在本地远程服务A看日志,请求没过去,那会也没怀疑服务A会存在问题。
本身服务A比较简单,就是接收前台参数,用OkHttp转发给本地远程服务B,接收本地远程服务B的返回结果处理之后就返回。
调了半下午,一度有点怀疑人生。
突如其来的SAO,差点闪了我的腰
到快下班,突发奇想,会不会是服务A的问题。
把远程连接上,打开日志记录,前端发起请求。
果然,问题就在这水灵灵的出现了,不早不晚。
什么原因呢?
之前服务A,做了一个骚操作:通过请求中地址和端口来转发到本地远程服务B。
比如前端的地址(因为网闸的原因,前端地址不固定)是:172.16.10.9,那此时本地远程服务B的请求地址就是:http://172.16.10.9/xxxx
但172.16.10.9这个地址其实在服务A是不可用的,就导致请求超时。
请求超时之后,没有处理任何请求,就直接返回的null(null来背锅!)。
后续怎么办?
把本地远程服务B的地址改为固定地址。
再试一次,果然可以了。
其实从服务A到本地远程服务B是内网环境,本身就是通的。
在整个流程中,只要网闸打开了对应的前端IP和端口,基本整个服务就是可用的(除了后端取了请求地址和端口会导致的服务不可用)。
好了,又上了一当。