nginx 如何在与上游 DNS 名称关联的 IP 之间分配流量?

nginx 如何在与上游 DNS 名称关联的 IP 之间分配流量?

使用以下配置:

upstream some_upstream {
  server some-elb.us-east-1.elb.amazonaws.com:80;
}

如果 some-elb.us-east-1.elb.amazonaws.com 映射到 2 个 IP 地址,nginx 将如何在它们之间分配请求?循环吗?(假设版本 1.1.19,以防行为在某个时候发生变化。)

另外,我读过这里nginx 在启动时缓存 DNS 结果。如果您使用变量,它将刷新它们,但前提是您已配置 DNS 解析器。因此,如果我没有配置 DNS 解析器,那么如果 some-elb.us-east-1.elb.amazonaws.com 的某个 IP 发生变化,会发生什么情况?nginx 会继续向其在启动时找到的同一组 IP 发送流量吗?

答案1

请注意,nginx1.1.19是一个开发版本,已经发布3 年多前。作为一名优秀的系统管理员,你的企业不应该出现这种事情。现在让我们关注你的实际问题。


正如文档所解释的:

一个域名解析到多个IP地址,一次定义多个服务器。

默认情况下,请求使用加权循环平衡方法在服务器之间分配。


对于解析器部分:是的,server如果您在配置中使用静态域名,nginx 将在启动时发出条目的域名查找,然后缓存任何结果,直到您重新启动它。

您的链接指向有关反向代理的帖子,特别是有关proxy_pass指令中域名的处理。这是一个不同的情况,您需要在指令值中使用变量来强制 nginx 更新其 DNS 缓存:resolver对于这种特殊情况,使用指令是不够的。

现在,回到server指令。使用resolver指令并添加resolve参数将允许监控 DNS 记录变化并自动重新加载新的服务器列表

resolve
   monitors changes of the IP addresses that correspond to a domain name of 
   the server, and automatically modifies the upstream configuration without 
   the need of restarting nginx (1.5.12).

   In order for this parameter to work, the resolver directive must be
   specified in the http block. 

相关内容