web-dev-qa-db-ja.com

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の1つが変更されるとどうなりますか? nginxは、起動時に検出したのと同じIPのセットにトラフィックを送信し続けますか?

5
sandinymyjoints

Nginx 1.1.19は、リリースされた開発バージョンであることに注意してください 年以上前 。優れたシステム管理者として、この種のものはあなたのビジネスに活かされるべきではありません。ここで、実際の質問に焦点を当てましょう。


ドキュメントで説明されているように:

複数のIPアドレスに解決されるドメイン名は、一度に複数のサーバーを定義します。

デフォルトでは、リクエストは加重ラウンドロビンバランシング方式を使用してサーバー間で分散されます。


リゾルバー部分の場合:はいnginxは起動時にserverエントリのドメイン名ルックアップを発行し、構成で静的ドメイン名を使用する場合は、再起動するまで結果をキャッシュします。

あなたのリンクは、リバースプロキシ、特に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. 
8
Xavier Lucas