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

如何在单台VPS上实现指定域名与对应Docker容器的绑定?

可行性结论

这个需求完全可以实现,核心依赖反向代理的域名路由能力:反向代理服务监听VPS的80/443入口端口,读取请求头中的Host字段(即用户访问的域名),将流量转发到对应绑定的WordPress容器即可。


推荐操作方案(Docker Compose + 可视化反向代理,新手友好)

该方案不需要手动编写Nginx配置,还支持自动签发/续期HTTPS证书,操作门槛更低。

前提准备

  • 两个域名都已解析到当前VPS的公网IP
  • VPS已安装docker和docker-compose,且80、443端口未被其他服务占用
  • 所有相关容器需要加入同一个Docker自定义网络,保证反向代理可以正常和WordPress容器通信

步骤1:创建Docker自定义网络

执行命令创建共享网络:

docker network create wp-proxy-net

后续所有部署的容器都要加入该网络。

步骤2:部署可视化反向代理服务Nginx Proxy Manager

创建docker-compose.yml配置文件,写入以下内容:

version: '3.8'
services:
  nginx-proxy-manager:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'
      - '443:443'
      - '81:81' # 管理后台访问端口
    volumes:
      - ./npm/data:/data
      - ./npm/letsencrypt:/etc/letsencrypt
    networks:
      - wp-proxy-net
networks:
  wp-proxy-net:
    external: true

执行docker-compose up -d启动服务,启动后访问VPS公网IP:81进入管理后台,默认登录信息:

  • 用户名:admin@example.com
  • 密码:changeme
    首次登录后按照提示修改账号密码即可。

步骤3:部署两个WordPress容器

可以把两个WordPress+数据库的配置追加到上述docker-compose.yml文件中,注意不要映射WordPress的80端口到宿主机,避免端口冲突:

# 对应example.com的WordPress容器1
  wp1:
    image: wordpress:latest
    restart: unless-stopped
    volumes:
      - ./wp1/html:/var/www/html
    environment:
      WORDPRESS_DB_HOST: wp1-db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: 自定义数据库密码
      WORDPRESS_DB_NAME: wordpress
    networks:
      - wp-proxy-net
    depends_on:
      - wp1-db

  wp1-db:
    image: mysql:8.0
    restart: unless-stopped
    volumes:
      - ./wp1/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: 和上面一致的数据库密码
      MYSQL_ROOT_PASSWORD: 自定义root账号密码
    networks:
      - wp-proxy-net

  # 对应example2.com的WordPress容器2
  wp2:
    image: wordpress:latest
    restart: unless-stopped
    volumes:
      - ./wp2/html:/var/www/html
    environment:
      WORDPRESS_DB_HOST: wp2-db
      WORDPRESS_DB_USER: wordpress
      WORDPRESS_DB_PASSWORD: 自定义第二个数据库密码
      WORDPRESS_DB_NAME: wordpress
    networks:
      - wp-proxy-net
    depends_on:
      - wp2-db

  wp2-db:
    image: mysql:8.0
    restart: unless-stopped
    volumes:
      - ./wp2/mysql:/var/lib/mysql
    environment:
      MYSQL_DATABASE: wordpress
      MYSQL_USER: wordpress
      MYSQL_PASSWORD: 和上面一致的第二个数据库密码
      MYSQL_ROOT_PASSWORD: 自定义第二个root账号密码
    networks:
      - wp-proxy-net

修改完配置后再次执行docker-compose up -d启动所有WordPress和数据库容器。

步骤4:配置域名转发规则

登录Nginx Proxy Manager管理后台,依次添加两条代理规则:

  1. example.com规则:
    • 域名栏填写example.com
    • 转发目标填写WordPress1的容器名wp1,端口填写容器内部的WordPress端口80
    • 可按需开启「Block Common Exploits」安全选项,也可以在SSL标签页直接申请免费的Let's Encrypt证书,自动开启HTTPS访问
  2. example2.com规则同上,域名填写example2.com,转发目标填写wp2,端口80即可

配置完成后等待1分钟左右生效,访问两个域名就会分别进入对应的WordPress站点。


原生Nginx手动配置替代方案

如果你不想用可视化工具,也可以直接在宿主机安装Nginx,编写配置文件实现转发,示例配置如下:

server {
    listen 80;
    server_name example.com;
    location / {
        proxy_pass http://wp1容器的内部IP: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;
    }
}

server {
    listen 80;
    server_name example2.com;
    location / {
        proxy_pass http://wp2容器的内部IP: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;
    }
}

配置完成后执行nginx -s reload生效,HTTPS证书可以手动申请后添加到对应server块中。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:24:03