You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何创建docker-compose.yml实现Nginx反向代理多WordPress容器连接MySQL

多容器WordPress集群+Nginx反向代理配置

一、完整docker-compose.yml配置

version: "3"

services:
  app-nginx:
    image: nginx:latest
    volumes:
      # 挂载自定义Nginx配置文件到容器内
      - ./nginx/default.conf:/etc/nginx/conf.d/default.conf
    ports:
      # 对外暴露80端口,接收外部请求
      - "80:80"
    restart: always
    # 加入自定义网络,确保容器间通信隔离
    networks:
      - wp-network

  app-mysql:
    image: mysql:5.7
    environment:
      # 设置MySQL root密码、默认数据库名
      MYSQL_ROOT_PASSWORD: your_root_password
      MYSQL_DATABASE: wordpress_db
      MYSQL_USER: wp_user
      MYSQL_PASSWORD: wp_password
    volumes:
      # 命名卷持久化MySQL数据,防止容器删除丢失数据
      - mysql_data:/var/lib/mysql
    restart: always
    networks:
      - wp-network
    # 不对外暴露端口,仅内部容器访问
    expose:
      - "3306"

  app-wordpress1:
    image: wordpress:latest
    environment:
      # 指定MySQL服务地址、数据库信息
      WORDPRESS_DB_HOST: app-mysql:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
    volumes:
      # 命名卷持久化WordPress文件
      - wp1_data:/var/www/html
      # 挂载自定义代码到容器内(根据实际路径调整)
      - ./nombre_archivo.py:/var/www/html/wp-content/plugins/nombre_archivo.py
    restart: always
    networks:
      - wp-network
    # 不对外暴露端口,仅Nginx可访问
    expose:
      - "80"

  app-wordpress2:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: app-mysql:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
    volumes:
      - wp2_data:/var/www/html
    restart: always
    networks:
      - wp-network
    expose:
      - "80"

  app-wordpress3:
    image: wordpress:latest
    environment:
      WORDPRESS_DB_HOST: app-mysql:3306
      WORDPRESS_DB_NAME: wordpress_db
      WORDPRESS_DB_USER: wp_user
      WORDPRESS_DB_PASSWORD: wp_password
    volumes:
      - wp3_data:/var/www/html
    restart: always
    networks:
      - wp-network
    expose:
      - "80"

# 定义命名卷,用于数据持久化
volumes:
  mysql_data:
  wp1_data:
  wp2_data:
  wp3_data:

# 自定义网络,实现容器间安全通信
networks:
  wp-network:
    driver: bridge

二、Nginx反向代理配置文件

在本地创建./nginx/default.conf文件,内容如下:

# 定义WordPress集群的上游服务器
upstream wordpress_cluster {
    server app-wordpress1:80;
    server app-wordpress2:80;
    server app-wordpress3:80;
    # 默认轮询策略,可根据需求调整为ip_hash、least_conn等
}

server {
    listen 80;
    server_name localhost; # 替换为你的域名

    location / {
        # 反向代理到WordPress集群
        proxy_pass http://wordpress_cluster;
        # 设置必要的请求头,确保WordPress能正确识别请求来源
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

三、关键配置说明

  • Nginx作为唯一入口:仅app-nginx容器对外映射80端口,三个WordPress容器仅通过expose暴露内部端口,外部无法直接访问,所有请求必须经过Nginx反向代理。
  • 容器间通信:Docker Compose自动创建的自定义网络wp-network中,容器可以通过服务名(如app-wordpress1、app-mysql)直接通信,无需IP地址。
  • 数据持久化:使用Docker命名卷挂载MySQL和WordPress的数据目录,避免容器删除或重启后数据丢失。
  • WordPress自动配置:通过environment字段传入数据库连接信息,WordPress容器启动时会自动生成wp-config.php,无需手动修改。
  • 自定义代码挂载:将本地的nombre_archivo.py挂载到WordPress容器的插件目录,可直接生效(需确保路径符合WordPress插件规范)。

内容的提问来源于stack exchange,提问作者mendes jota

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.01 13:19:53