
It's ALWAYS DNS!
今天前端遇到一个问题,前端部署的[反向代理]](/posts/nginx-proxy/)到后端的upstream一直pending。 timeout? 以为是后端服务压力大,来不及响应,所以更新upstream配置,加上timeout。 立竿见影,没问题了。 1 2 3 4 5 6 7 8 9 10 11 12 location /api/ { proxy_set_header Host $http_host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; rewrite ^/api/(.*)$ /$1 break; proxy_pass http://api_server/; proxy_connect_timeout 5s; proxy_send_timeout 10s; proxy_read_timeout 10s; } 一段时间后,后端又接受不到前端请求了,nginx一直报错499。 DNS ! 调查了一段时间后发现根本问题是nginx的dns cache机制的问题。 原来后端每次更新k8s后端deployment的时候,也会重建service从而导致 service的 IP发生了变化。 和后端沟通修改了后端更新流水线脚本,不再重建service 后,问题解决 :) dubug force resolve (bad performance) force nginx to resolve DNS (of a dynamic hostname) everytime when doing proxy_pass? 1 2 3 4 5 6 7 server { #... resolver 127.0.0.1; set $backend "http://dynamic.example.com:80"; proxy_pass $backend; #... } resolver ...