web-dev-qa-db-ja.com

Apache HTTPDプロキシがローカルDNSエラーを渡す

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

/ etc/hosts:

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
2
Gavin

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

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

ホスト上の/etc/hostsファイルにコンテナのDNS名とIPアドレスを入力するか、DNS名の代わりにIPアドレスを介して他のコンテナを参照するか、エイリアスのみで参照して--linkを使用できます。コマンド。

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

2
Tommiie