2016-10-30 2 views
2

ELBでreverse_proxyサーバとしてnginxを使用しています。私は、nginx.confファイルで設定したリゾルバ値に関する説明を探しています。マイnginx.conf:nginxのリゾルバのパラメータ

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の値を設定し、それが正常に動作します。この後ろに立っているのは何ですか?

答えて

3

システムレゾルバブロックを獲得してください。 Nginxはサーバを多重化しています(1つのOSプロセスで多くの接続が行われています)ので、システムリゾルバの各呼び出しは、解決された応答が受信されるまですべての接続の処理を停止します。なぜNginxは自身の内部非ブロッキングリゾルバを実装したのですか?

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

Nginxのリロードなしで実行時にドメイン名を解決する場合は、Nginxのresolverが使用されます。

+0

おかげで@ Terra、動的DNS名(ELB)を使用しているため、IPの変更を追跡する必要があります。 /etc/resolv.confのネームサーバの値を使用しているのが適切な解決策ですか? – guyyug

+0

はい、resolve.confに記載されているものを含む任意のDNSサーバーを使用できます。 –

+0

「すべて」ではなく、パブリックDNSを使用しないでください。いくつかのセキュリティ上の問題があります。ローカルDNSリゾルバを使用する方が良い。 –

2

Nginxリゾルバディレクティブは、ELBとproxy_passに依存するAWS環境にとって重要です。ここで私はオープンソースのnginxのによって静的DNSキャッシュに最近記述問題と解決策を書いた記事は以下のとおりです。

Nginx resolver explained and how to deal with changing IPs

基本的に、それは単純なケースのための設定を次のように煮詰めるます:

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; 
    } 
} 
関連する問題