[英]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.