この構成では:
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のセットにトラフィックを送信し続けますか?
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.