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

如何在NGINX反向代理后配置多Docker WordPress容器网络?

解决Docker中多WordPress容器+Nginx反向代理的端口隔离问题

核心认知纠正

你担心的WordPress容器80端口冲突是不存在的——Docker自定义网络(比如桥接网络)中,每个容器都有独立的内部IP,各自的80端口相互隔离,只有当你把容器端口映射到主机端口时才会出现冲突。所以根本不需要修改WordPress容器内部的端口,也不需要把Nginx挂到主机网络。

具体实现步骤

  1. 创建自定义Docker网络
    先搭建一个专属内部网络,让Nginx和所有WordPress容器都加入这个网络,它们之间可以用容器名直接通信:

    docker network create wp-internal-net
    
  2. 启动WordPress容器(无需映射主机端口)
    启动两个WordPress容器,加入自定义网络,不用加-p参数映射主机端口(内部网络里用容器名访问):

    # 第一个WordPress容器
    docker run -d \
      --name wp-site1 \
      --network wp-internal-net \
      -e WORDPRESS_DB_HOST=db-site1:3306 \
      -e WORDPRESS_DB_USER=wpuser \
      -e WORDPRESS_DB_PASSWORD=wppass \
      -e WORDPRESS_DB_NAME=wpdb1 \
      wordpress:latest
    
    # 第二个WordPress容器
    docker run -d \
      --name wp-site2 \
      --network wp-internal-net \
      -e WORDPRESS_DB_HOST=db-site2:3306 \
      -e WORDPRESS_DB_USER=wpuser \
      -e WORDPRESS_DB_PASSWORD=wppass \
      -e WORDPRESS_DB_NAME=wpdb2 \
      wordpress:latest
    

    (注意:每个WordPress需要搭配独立的MySQL/MariaDB容器,同样加入wp-internal-net网络,用容器名作为数据库主机地址)

  3. 配置Nginx反向代理容器
    启动Nginx容器,映射主机的80/443端口到容器的80/443,同时加入自定义网络:

    docker run -d \
      --name nginx-proxy \
      --network wp-internal-net \
      -p 80:80 \
      -p 443:443 \
      -v /path/to/your/nginx/config:/etc/nginx/conf.d \
      nginx:latest
    
  4. 编写Nginx反向代理配置
    在你挂载的Nginx配置目录下,创建两个站点配置文件(比如site1.conf和site2.conf):

    • site1.conf:
      server {
          listen 80;
          server_name your-site1-domain.com;
      
          location / {
              proxy_pass http://wp-site1:80;
              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;
          }
      }
      
    • site2.conf:
      server {
          listen 80;
          server_name your-site2-domain.com;
      
          location / {
              proxy_pass http://wp-site2:80;
              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;
          }
      }
      

    配置HTTPS的话,只需在Nginx配置中添加SSL证书路径,监听443端口即可,无需改动WordPress容器。

额外说明

  • 所有容器都在wp-internal-net网络内,彼此通过容器名+内部端口(比如wp-site1:80)通信,完全和主机网络隔离,只有Nginx容器对外暴露80/443端口。
  • 不需要修改WordPress容器的内部端口,官方镜像的80端口在内部网络中是安全且互不干扰的。

内容的提问来源于stack exchange,提问作者Dr. Spatula

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 14:41:04