Apache HTTPD 프록시 통과 로컬 DNS 실패

Apache HTTPD 프록시 통과 로컬 DNS 실패

내 Windows 컴퓨터의 Ubuntu VM에서 Docker를 사용하여 Apache Tomcat과 Apache HTTP를 실행하고 있습니다. Tomcat(포트 8080에서 실행)에 대한 프록시 요청을 역방향으로 수행하도록 HTTP 서버(포트 80에서 실행)를 구성했습니다.

/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 애플리케이션이 작동하므로 DNS를 올바르게 확인하지 못하는 Apache HTTP 서버의 문제인 것처럼 보입니다.

참고로 내 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

네트워킹에 대한 기본 설정을 사용하여 두 개의 컨테이너를 만들었으므로 고려해야 할 몇 가지 사항이 있습니다.

  • 기본적으로 IP 주소를 통해서만 통신할 수 있습니다.
  • 이름 확인을 원할 경우 --link컨테이너를 생성할 때 옵션을 사용해야 하며 각 방향으로 링크를 생성해야 합니다.
  • 컨테이너는 기본적으로 호스트 /etc/hosts파일과 해당 /etc/resolv.conf파일의 설정을 사용하지만 루프백 주소에 대한 참조와 같은 일부 구성을 제거합니다.
  • 가능한 해결책 중 하나는 DNS 서버를 실행하는 세 번째 도커 컨테이너를 추가하고 --dns두 컨테이너 모두에 옵션을 추가하는 것입니다. 그러나 이는 필요한 것보다 더 많은 소프트웨어를 도입하게 될 것입니다.

컨테이너의 DNS 이름과 IP 주소로 호스트의 파일을 채우거나 /etc/hosts, DNS 이름 대신 IP 주소를 통해 다른 컨테이너를 참조하거나, ALIAS로만 참조하고 명령을 사용할 수 있습니다 --link.

또한보십시오: -컨테이너 DNS 구성 -도커 컨테이너 네트워킹

관련 정보