簡體   English   中英

Docker apache 容器重定向到另一個容器

[英]Docker apache container redirect to another container

我有兩個 apache 容器連接到同一個橋接網絡。 第一個 apache 172.20.10.2 和端口 8080(內部 80) 第二個 apache 172.20.10.6 和端口 9999(內部 80)。

首先 apache 在端口 80 上配置了兩個虛擬主機。第一個虛擬主機支持 mydomain.com 在 apache 上,一切正常。 第二個虛擬主機支持 subdomain.mydomain.com 並重定向到第二個 apache 服務器。 此重定向不起作用,並且在日志中我收到了該錯誤:

"GET /favicon.ico HTTP/1.1" 502 360
[proxy:error] [pid 43:tid 3028272160] (111)Connection refused: AH00957: http: attempt to connect to 172.20.10.6:9999 (172.20.10.6) failed
[proxy_http:error] [pid 43:tid 3028272160] [client Client_IP:PORT] AH01114: HTTP: failed to make connection to backend: 172.20.10.6
"GET / HTTP/1.1" 503 299
[proxy:error] [pid 8:tid 3011486752] [client Client_IP:PORT] AH00898: DNS lookup failure for: 172.20.10.6:9999favicon.ico returned by /favicon.ico, referer: http://subdomain.mydomain.com/
"GET /favicon.ico HTTP/1.1" 502 360

docker-compose.yml

version: "3.8"

volumes:
  httpd_all:
  httpd_all_2:

networks:
  frontend_web:
    driver: bridge
    ipam:
      driver: default
      config:
        - subnet: 172.20.10.0/29

services:

  httpd:

    container_name: httpd
    image: httpd:latest
    hostname:
      srv_www01
    ports:
      - 8080:80/tcp
      - 8043:443/tcp
    volumes:
      - httpd_all:/usr/local/apache2/
    networks:
      frontend_web:
        ipv4_address: 172.20.10.2
    restart: unless-stopped

  httpd_2:

    container_name: httpd_2
    image: httpd:latest
    hostname:
      srv_www02
    ports:
      - 9999:80/tcp
      - 9998:443/tcp
    volumes:
      - httpd_all_2:/usr/local/apache2/
    networks:
      frontend_web:
        ipv4_address: 172.20.10.6
    restart: unless-stopped

第一個 apache 172.20.10.2 上的虛擬主機

<VirtualHost *:80>
        ServerName mydomain.com
        ServerAlias mydomain.com
        DocumentRoot /usr/local/apache2/htdocs
        Alias /jasno "/usr/local/apache2/htdocs"

</VirtualHost>

<VirtualHost *:80>
        ServerName subdomain.mydomain.com
        ServerAlias www.subdomain.mydomain.com

        ProxyRequests Off
        ProxyPreserveHost On
        ProxyVia Full

        <Proxy *>
                Require all granted
        </Proxy>

        ProxyPass "/" "http://172.20.10.6:9999"
        ProxyPassReverse "/" "http://172.20.10.4:9999"

</VirtualHost>

容器之間的連接忽略ports: . 如果第二個容器內的進程偵聽端口 80 和 443,則容器之間的連接將永遠只使用這些端口,即使ports:使它們作為主機外部的其他東西可見。 由於端口 80 是默認的 HTTP 端口,因此您可以將其完全排除在配置之外:

ProxyPass "/" "http://172.20.10.6"

您可以進一步簡化此設置。 如 Docker 文檔中的Networking in Compose中所述,Docker 提供了一個內部 DNS 系統,並且每個容器都可以使用其 Compose 服務名稱從同一 Compose 文件中的其他容器訪問。 您可以在 Apache 設置中使用該主機名,而不是手動指定 IP 地址

ProxyPass "/" "http://httpd_2"

完成此操作后,您可以大大簡化 Compose 設置。 讓 Docker 自己選擇 IP 地址幾乎總是安全的,而不是手動分配它們。 Compose 還可以分配容器名稱,它會為您創建一個名為default的網絡,而hostname:設置通常沒有明顯的效果。 您應該能夠將其縮減為:

version: "3.8"

volumes:
  httpd_all:
  httpd_all_2:

services:
  httpd:
    image: httpd:latest
    ports:
      - 8080:80/tcp
      - 8043:443/tcp
    volumes:
      - httpd_all:/usr/local/apache2/
    restart: unless-stopped

  httpd_2:
    image: httpd:latest
    # ports:              only if the service needs to be
    #   - 9999:80/tcp     accessed from outside Docker; not used
    #   - 9998:443/tcp    for connections between containers
    volumes:
      - httpd_all_2:/usr/local/apache2/
    restart: unless-stopped

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM