web-dev-qa-db-ja.com

nginxのResolverパラメータは何をしますか?

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値をリゾルバー値として設定し、それは正常に動作します。この背後に何が立っていますか?

8
guyyug

システムリゾルバーがブロックするため、nginxリゾルバーディレクティブが必要です。 Nginxは多重化サーバー(1つのOSプロセスに多数の接続)であるため、システムリゾルバーの各呼び出しは、リゾルバーの応答を受信するまですべての接続の処理を停止します。そのため、Nginxは独自の内部ノンブロッキングリゾルバーを実装しました。

構成ファイルに静的DNS名(生成されていない)があり、nginxのリロードなしでIPの変更を追跡する必要がない場合は、nginxのリゾルバーは必要ありません。この場合、起動時にすべてのDNS名が解決されます。

Nginxを再ロードせずにランタイムでドメイン名を解決する場合は、nginxのresolverを使用する必要があります。

8
Dmitry MiksIr

Nginxリゾルバーディレクティブは、ELBとproxy_passに依存するすべてのAWS環境にとって重要です。私が最近書いた投稿は、オープンソースnginxによる静的DNSキャッシングの問題と解決策を説明したものです。

Nginxリゾルバの説明とIPの変更に対処する方法

基本的には、単純なケースでは次の構成に要約されます。

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;
  }
}
7
gansbrest