Nginx
NGINX 不尊重上游伺服器的 DNS TTL
我有一個 NGINX TCP 負載均衡器,配置如下:
user myusername; worker_processes auto; error_log /var/log/nginx/error.log; pid /run/nginx.pid; include /usr/share/nginx/modules/*.conf; load_module /usr/lib/nginx/modules/ngx_stream_module.so; events { worker_connections 1024; } stream { upstream api_backend_http { server myserver1.mydomain.com:80; server myserver2.mydomain.com:80; } upstream api_backend_https { server myserver1.mydomain.com:443; server myserver2.mydomain.com:443; } server { listen 80; proxy_pass api_backend_http; proxy_buffer_size 16k; proxy_connect_timeout 1s; } server { listen 443; proxy_pass api_backend_https; proxy_buffer_size 16k; proxy_connect_timeout 1s; } }
myserver1.mydomain.com 的 DNS TTL 設置為 30 秒。更改此設置 45 分鐘後,NGINX 仍在向舊 IP 地址發送流量。
這不應該發生 - 理想情況下,它應該尊重上游伺服器 DNS 名稱的 TTL。但它似乎沒有這樣做。有誰知道實際的 TTL 是什麼,以及如何更改它?
旁注,這感覺就像 NGINX 中的一個錯誤。
您需要顯式配置 nginx 以主動並定期刷新主機名到 IP 地址的映射。
否則,該映射僅在重新啟動/重新載入時進行。(順便說一句,這也是許多其他伺服器和服務中出現的一個缺點,而 nginx 並沒有什麼獨特之處。)
您需要添加
resolver
指令等等。看