背景:
开发发现测试环境业务异常,影响新需求上线,排查日志中发现nginx日志中出现proxy_pass代理地址timeout报错,直接使用代理地址curl没问题,重启nginx就好了。由于是开发自建自运维的nginx服务器,且出问题当天运维有对服务器进行审计操作,开发便把这口锅甩给我们运维人员!!!
排查问题:
我们大运维怎么可以随意背锅!!!遂偷偷潜入开发nginx服务器进行问题排查,步骤如下:
1、查看日志报错:
2、根据日志中的uri信息,查看nginx的location匹配规则,定位proxy_pass转发配置;
3、通过配置的代理地址,可以发现这是一个CDN地址,顿时问题就明了了!知识点:nginx启动和重载时会将代理地址的解析IP缓存下来,如果代理地址的IP解析变更,nginx不会更新解析关系,直到下一次nginx重启;CDN的域名通过CNAME解析,无法保证域名解析不变,所以不建议代理地址使用CDN域名。
4、开发质疑生产为什么没有问题?这是个好问题!!!由于我们使用的是云环境,测试和生产所在的服务器不在同一个可用区,所以CDN解析的IP不一样,变更的节奏也不相同!
总结(解决方案):
1、专业的人做专业的事,nginx应该由运维同学统一管理维护;
2、nginx中的代理地址尽量使用IP+端口号的形式,一定要使用域名的话,记得域名变更后同时重载nginx。
标签:IP,CDN,代理,nginx,地址,proxy,timeout,日志 From: https://blog.51cto.com/u_8596219/6218546