Apache HTTPD プロキシがローカル DNS に失敗する

Apache HTTPD プロキシがローカル DNS に失敗する

私は Windows マシン上の Ubuntu VM で Docker を使用して Apache Tomcat と Apache HTTP を実行しています。HTTP サーバー (ポート 80 で実行) を Tomcat (ポート 8080 で実行) へのリクエストをリバース プロキシするように構成しました。

/etc/ホスト:

127.0.0.1 localapp.com localhost

HTTP /conf/httpd.conf

<IfModule mod_proxy.c>

    ProxyRequests Off

    ProxyPass /app/api/ http://localapp.com:8080/api/

    ProxyPassReverse /app/api/ http://localapp.com:8080/api/

</IfModule>

HTTP /conf/extra/httpd-vhosts.conf

<VirtualHost *:80> 
    DocumentRoot "/usr/local/apache2/htdocs/app" 
    ServerName localapp.com
    <Directory "/usr/local/apache2/htdocs/app"> 
            Require all granted 
    </Directory>
</VirtualHost> 

<VirtualHost *:80> 
    DocumentRoot "/usr/local/apache2/htdocs" 
    ServerName localhost 
    <Directory "/usr/local/apache2/htdocs"> 
            Require all granted 
    </Directory> 
</VirtualHost>

HTTP アプリケーションを実行したり、localapp.com/api ディレクトリにアクセスしようとすると、DNS ルックアップに失敗したことを示す 502 応答が返されます。

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>502 Proxy Error</title>
</head><body>
<h1>Proxy Error</h1>
<p>The proxy server received an invalid
response from an upstream server.<br />
The proxy server could not handle the request <em><a href="/api">GET&nbsp;/api</a></em>.<p>
Reason: <strong>DNS lookup failure for: localapp.com</strong></p></p>
</body></html>

何らかの理由で、Apache HTTP が localapp.com にプロキシできないようです。ブラウザから直接 localapp.com:8080/api にアクセスすると Tomcat アプリケーションは動作します。したがって、Apache HTTP サーバーが DNS を正しく解決していないという問題のようです。

参考までに、私の nsswitch.conf は次のとおりです。

passwd:         compat
group:          compat
shadow:         compat
gshadow:        files

hosts:          files dns
networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       nis

答え1

ネットワークのデフォルト設定で 2 つのコンテナーを作成したので、考慮すべき点がいくつかあります。

  • デフォルトでは、IP アドレスを使用してのみ通信できます。
  • 名前解決が必要な場合は、コンテナを作成するときにオプションを使用し--link、各方向にリンクを作成する必要があります。
  • /etc/hostsコンテナーはデフォルトで、ホストのファイルとそのファイルの設定を使用します/etc/resolv.confが、ループバック アドレスへの参照などの一部の構成は削除されます。
  • 考えられる解決策の 1 つは、DNS サーバーを実行する 3 番目の Docker コンテナーを追加し、--dns両方のコンテナーにオプションを追加することです。ただし、これでは必要以上に多くのソフトウェアが導入されることになります。

/etc/hostsホスト上のファイルにコンテナの DNS 名と IP アドレスを入力し、DNS 名ではなく IP アドレスで他のコンテナを参照したり、ALIAS のみで参照してコマンドを使用したりすることができます--link

参照: -コンテナDNSの設定 -Dockerコンテナネットワーク

関連情報