如何在单台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管理后台,依次添加两条代理规则:
- example.com规则:
- 域名栏填写
example.com - 转发目标填写WordPress1的容器名
wp1,端口填写容器内部的WordPress端口80 - 可按需开启「Block Common Exploits」安全选项,也可以在SSL标签页直接申请免费的Let's Encrypt证书,自动开启HTTPS访问
- 域名栏填写
- 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
相关产品推荐
相关产品推荐

