Domain-Name-System

nginx 如何在與上游 DNS 名稱關聯的 IP 之間分配流量?

  • June 24, 2015

使用此配置:

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 發送流量嗎?

請注意,nginx1.1.193 年前推出的開發版本。作為一名優秀的系統管理員,您的業務中不應出現此類情況。現在讓我們專注於您的實際問題。

正如文件所解釋的:

解析為多個 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. 

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