研发请求协助排查一个nginx故障。
描述如下:
在内部环境测试没问题。
打包到生产环境后,访问nginx接口地址超时。
研发比对后怀疑是nginx版本不一致导致。内部版本1.23.2,生产环境1.23.1.
收到信息第一感觉不是nginx的问题。不过先测试一下,现象跟研发描述的一样。
登录服务器,看了nginx.conf配置,发现访问这个端口后,实际做了转发。转发给内网地址:http://10.0.0.7:8000
这个端口是java启动的一个服务。
使用ss -lntp查看,这个服务端口是存在的。
在使用内存命令测试端口
nc -w 2 -z -v 10.0.0.7 8000
端口也是有反应。
老办法,查看access.log,看到输出500错误码。
再查看error.log,确实有timeout的错误提示。
这样看来是转发给接口地址后没有了反馈。
不过为了排除版本问题,还是升级到1.23.2,当然问题依旧。
研发只好再代码里添加的debug信息。
根据debug信息输出,可以判断到,请求接受到了,但是再调用第一个function时就没有反馈信息了。虽然还不知道啥问题,但是基本确定就是程序某个地方导致故障。
接下来就是研发一点点排查,最终结果是代码打包时,没有修改database连接相关信息,保留的是内部环境参数。连接数据库错误后导致后续处理超时卡死。
总结:
内部测试通过,放到生产环境时出现问题,很多时候就是使用了内部环境参数导致的。
建议把相关参数提取出来,作为配置文件单独存放。
排查问题,顺着执行流,排除其它环节后,剩下的环节就是问题所在。
最后一点就是不能急躁,保持冷静。