ELBを備えたreverse_proxyサーバーとしてnginxを使用しています。 nginx.confファイルで設定したリゾルバー値に関する説明を探しています。私のnginx.conf:
http {
...
resolver x.x.x.x valid=30s;
...
}
server {
...
set $elb "example.com";
location / {
...
rewrite ^/(.*) $1 break;
proxy_pass http://$elb/$1?$args;
...
}
...
}
私はこれに従いました- https://www.Ruby-forum.com/topic/6816375#1166569 と/etc/resolv.conf値をリゾルバー値として設定し、それは正常に動作します。この背後に何が立っていますか?
システムリゾルバーがブロックするため、nginxリゾルバーディレクティブが必要です。 Nginxは多重化サーバー(1つのOSプロセスに多数の接続)であるため、システムリゾルバーの各呼び出しは、リゾルバーの応答を受信するまですべての接続の処理を停止します。そのため、Nginxは独自の内部ノンブロッキングリゾルバーを実装しました。
構成ファイルに静的DNS名(生成されていない)があり、nginxのリロードなしでIPの変更を追跡する必要がない場合は、nginxのリゾルバーは必要ありません。この場合、起動時にすべてのDNS名が解決されます。
Nginxを再ロードせずにランタイムでドメイン名を解決する場合は、nginxのresolver
を使用する必要があります。
Nginxリゾルバーディレクティブは、ELBとproxy_passに依存するすべてのAWS環境にとって重要です。私が最近書いた投稿は、オープンソースnginxによる静的DNSキャッシングの問題と解決策を説明したものです。
基本的には、単純なケースでは次の構成に要約されます。
server {
listen 80;
server_name example.com;
location / {
resolver 172.16.0.23;
set $upstream_endpoint http://service-999999.eu-west-2.elb.amazonaws.com;
proxy_pass $upstream_endpoint$request_uri;
}
}