【问题标题】:Docker - Configuring PhpMyAdmin container behind Apache reverse proxy containerDocker - 在 Apache 反向代理容器后面配置 PhpMyAdmin 容器
【发布时间】:2019-05-18 17:28:49
【问题描述】:

我想在我的 AWS EC2 主机上设置 docker 容器的配置。

我希望有一个 Apache 反向代理容器,它在端口 80、443 和 8080 上接收来自 EC2 主机的请求,并将其传递给它后面的容器。 80 和 443 上的请求应传递到 Web 应用程序容器(暴露端口 80)。而那些在 8080 上的,应该被传递给一个运行 phpmyadmin 的容器(暴露端口 80)。我正在使用官方的 phpmyadmin/phpmyadmin docker 镜像。

目前正在尝试为本地开发运行此设置,其中:

在 Chrome 开发工具中检查请求,将 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>

【问题讨论】:

  • 您是否检查过您的 ec2 端口 8080 和 443 在安全组中打开的位置?
  • 实际上,这将用于生产,是的,端口是开放的。目前,我正在尝试在本地为我的开发环境运行此设置。

标签: apache docker phpmyadmin docker-compose reverse-proxy


【解决方案1】:

这没什么大不了的。原来我的反向代理 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>

【讨论】:

    猜你喜欢
    • 2014-12-15
    • 2021-09-30
    • 2017-11-13
    • 2021-05-04
    • 2019-01-14
    • 2018-03-20
    • 1970-01-01
    • 2018-12-20
    • 2018-05-29
    相关资源
    最近更新 更多