Nginx

NGINX 不尊重上游伺服器的 DNS TTL

  • July 11, 2022

我有一個 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指令等等。

引用自:https://serverfault.com/questions/1105249