web-dev-qa-db-ja.com

proxy_passを使用する場合、「resolver」の代わりに/ etc / hostsを使用してドメイン名を解決できますか?

proxy_passを使用する場合、resolverの代わりに/ etc/hostsを使用できますか?

同じnginxマシンに対してproxy_passを実行する必要があります。 「resolver」プロパティを介してDNSサーバーを指定する代わりに、マシンの/ etc/hostsファイルを使用してドメインを解決する方法はありますか?

これにより、同じサーバーに到達するために必要な追加のホップを節約できます。/etc/hostsファイルでDNSにマップされた内部IPを設定しようとしましたが、nginxはresolverプロパティで設定されたDNSサーバーからまだ読み取りを行っています。または、HTTPProxyモジュールに/ etc/hostsファイルの設定を考慮させる方法はありますか?

あなたが共有できるアドバイスをありがとう。

これは私がnginxフォーラムに投稿したのと同じ質問です: http://forum.nginx.org/read.php?11,218997

これを回避するには、dnsmasqをインストールし、リゾルバーを127.0.0.1に設定します。基本的に、これはローカルDNSをリゾルバーとして使用しますが、それが知っていることだけを解決し(その中には、/etc/hostsがあります)、残りをデフォルトのDNSに転送します。

40
Mikael Karon

回避策は、/etc/hostsコンテンツをコピーするためにNginxマップを使用することです。

map $wanted_Host $wanted_Host_ip
{
    default 127.0.0.1;
    b.dev.local X.X.X.X;
    a.dev.local X.X.X.X;
}

server
{
    listen              80;
    server_name         ~^(?P<wanted_port>[0-9]+?)-(?P<wanted_Host>.+?)\.HOSTNAME$;

    location /
    {
        proxy_pass http://$wanted_Host_ip:$wanted_port;

    }
}

これにより、リゾルバーのようにwanted_Hostwanted_Host_ipにマップされます。

5
Thomas Decaux