我想在我的AWS EC2主机上设置docker容器的配置。
我希望有一个Apache反向代理容器,该容器可以接收来自EC2主机在端口80、443和8080上的请求,并将其传递给它后面的容器。 80和443上的请求应传递到Web应用程序容器(具有暴露的端口80)。而8080上的那些应该传递给运行phpmyadmin的容器(具有暴露的端口80)。我正在使用官方的 phpmyadmin / phpmyadmin Docker映像。
当前正在尝试运行此设置以进行本地开发,其中:
在Chrome Dev Tools中检查请求,将phpmyadmin请求的“状态”显示为“失败”。我无法弄清楚是什么导致请求失败。 希望对此有所帮助。
下面是我的配置。
环境变量(.dev.env):
# For PHPMyAdmin
PMA_HOST=db
PMA_PORT=3306
PMA_ABSOLUTE_URI=http://localhost:8080/
docker-compose.yml配置:
# Development
version: '3'
services:
db:<test_database_config>
proxy:
build:
context: .
dockerfile: Dockerfile.proxy.dev
env_file: .dev.env
volumes:
- ./etc/apache2/sites-available:/etc/apache2/sites-available
ports:
- "80:80"
- "443:443"
- "8080:8080"
phpmyadmin:
image: phpmyadmin/phpmyadmin
links:
- db
env_file: .dev.env
expose:
- '80'
depends_on:
- db
- proxy
web:
build:
context: .
dockerfile: Dockerfile.dev
env_file: .dev.env
volumes:
- ./website_content:/var/www/html/website_content
- ./subdomain_website_content:/var/www/html/subdomain_website_content
- ./etc/apache2/sites-available:/etc/apache2/sites-available
extra_hosts:
- "subdomain.localhost:127.0.0.1"
expose:
- "80"
depends_on:
- db
- proxy
- phpmyadmin
反向代理Apache配置(已启用站点中的配置):
<IfModule mod_ssl.c>
<VirtualHost *:80>
ErrorLog ${APACHE_LOG_DIR}/proxy_port_80_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_port_80_access.log combined
ProxyPreserveHost On
ProxyPass / http://web:80/
ProxyPassReverse / http://web:80/
</VirtualHost>
<VirtualHost *:443>
ErrorLog ${APACHE_LOG_DIR}/proxy_port_443_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_port_443_access.log combined
ProxyPreserveHost On
ProxyPass / http://web:80/
ProxyPassReverse / http://web:80/
</VirtualHost>
</IfModule>
<VirtualHost *:8080>
ErrorLog ${APACHE_LOG_DIR}/proxy_port_8080_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_port_8080_access.log combined
ProxyPreserveHost On
ProxyPass / http://phpmyadmin:80/
ProxyPassReverse / http://phpmyadmin:80/
</VirtualHost>
答案 0 :(得分:0)
这没什么大不了的。原来,我的反向代理Apache没有配置为侦听端口8080。
将其添加到我的 ports.conf 文件中:
Listen 80
Listen 8080
<IfModule mod_ssl.c>
Listen 443
</IfModule>
docker-compose.yml和环境变量配置没有问题;他们照原样工作。
对于使用上述apache配置的任何人,这是另一个小的更改-只需将端口443的VirtualHost放在IfModule内,如下所示:
<IfModule mod_ssl.c>
<VirtualHost *:443>
#ServerAdmin webmaster@localhost
#DocumentRoot /var/www/html/
ErrorLog ${APACHE_LOG_DIR}/proxy_port_443_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_port_443_access.log combined
ProxyPreserveHost On
ProxyPass / http://web:80/
ProxyPassReverse / http://web:80/
</VirtualHost>
</IfModule>
<VirtualHost *:80>
#ServerAdmin webmaster@localhost
#DocumentRoot /home/ubuntu/DNZProject/
ErrorLog ${APACHE_LOG_DIR}/proxy_port_80_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_port_80_access.log combined
ProxyPreserveHost On
ProxyPass / http://web:80/
ProxyPassReverse / http://web:80/
</VirtualHost>
<VirtualHost *:8080>
#ServerAdmin webmaster@localhost
#DocumentRoot /home/ubuntu/DNZProject/
ErrorLog ${APACHE_LOG_DIR}/proxy_port_8080_error.log
CustomLog ${APACHE_LOG_DIR}/proxy_port_8080_access.log combined
ProxyPreserveHost On
ProxyPass / http://phpmyadmin:80/
ProxyPassReverse / http://phpmyadmin:80/
</VirtualHost>