我有一个 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 中的一个错误。
答案1
您需要明确配置 nginx,使其主动且定期刷新主机名到 IP 地址的映射。
否则,该映射仅在重新启动/重新加载时进行。(顺便说一句,这也是许多其他服务器和服务中都会出现的缺点,并非 nginx 独有的。)
您需要添加一个resolver
指令等等。
看
答案2
在花了时间之后,似乎如果你想要这个并且还想要有多个上游,你基本上必须购买 NGINX Plus。
因此,请考虑使用 Envoy。它免费,拥有出色的许可证,并且内置了 DNS 刷新和上游健康检查。