Docker 部署 Nginx 实现多级子域名映射不同 Web 项目
在现代 web 开发中,使用 Nginx 代理不同的子域名到相应的 web 项目是一个常见的需求。本文将详细介绍如何在 Docker 中部署 Nginx,并配置多级子域名(如三级、四级域名)映射到不同的 web 项目路径。

一、准备工作
1. Docker 和 Docker Compose 安装
确保系统已安装 Docker 和 Docker Compose。如果尚未安装,可以参考官方文档进行安装:
2. 创建项目目录
创建一个项目目录,并在其中创建 Nginx 配置文件和 Docker Compose 文件:
mkdir nginx-multi-domain
cd nginx-multi-domain
二、创建 Nginx 配置文件
在项目目录下创建一个名为 nginx.conf 的文件,用于定义 Nginx 的配置。
touch nginx.conf
编辑 nginx.conf 文件,添加以下内容:
events {}
http {
server {
listen 80;
server_name sub1.example.com;
location / {
proxy_pass http://web1: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;
}
}
server {
listen 80;
server_name sub2.example.com;
location / {
proxy_pass http://web2: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;
}
}
server {
listen 80;
server_name sub3.sub2.example.com;
location / {
proxy_pass http://web3: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;
}
}
}
上述配置文件中定义了三个服务器块,每个块对应一个子域名,并将请求代理到不同的 web 服务。
三、创建 Docker Compose 文件
在项目目录下创建一个名为 docker-compose.yml 的文件,用于定义 Docker 服务。
touch docker-compose.yml
编辑 docker-compose.yml 文件,添加以下内容:
version: '3'
services:
nginx:
image: nginx:latest
container_name: nginx
ports:
- "80:80"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf:ro
depends_on:
- web1
- web2
- web3
web1:
image: nginx:latest
container_name: web1
volumes:
- ./web1:/usr/share/nginx/html
web2:
image: nginx:latest
container_name: web2
volumes:
- ./web2:/usr/share/nginx/html
web3:
image: nginx:latest
container_name: web3
volumes:
- ./web3:/usr/share/nginx/html
在这个文件中,我们定义了四个服务:nginx、web1、web2 和 web3。nginx 服务作为反向代理,其他三个服务作为 web 服务,并挂载到本地不同的目录。
四、准备 Web 项目目录
在项目目录下创建三个子目录,分别用于存放三个 web 项目的文件:
mkdir web1 web2 web3
在每个目录下创建一个 index.html 文件,用于测试:
echo "Welcome to web1" > web1/index.html
echo "Welcome to web2" > web2/index.html
echo "Welcome to web3" > web3/index.html
五、启动服务
在项目目录下运行以下命令启动 Docker Compose 服务:
docker-compose up -d
该命令将启动所有定义的服务,并在后台运行。
六、验证配置
确保 DNS 或 /etc/hosts 文件中正确配置了子域名指向本机 IP 地址,例如:
127.0.0.1 sub1.example.com
127.0.0.1 sub2.example.com
127.0.0.1 sub3.sub2.example.com
在浏览器中访问以下 URL,验证每个子域名是否正确映射到相应的 web 项目:
- http://sub1.example.com 应显示 "Welcome to web1"
- http://sub2.example.com 应显示 "Welcome to web2"
- http://sub3.sub2.example.com 应显示 "Welcome to web3"
七、总结
本文详细介绍了如何在 Docker 中部署 Nginx,实现多级子域名映射到不同的 web 项目路径。通过合理配置 Nginx 和 Docker Compose,可以轻松管理和扩展多域名、多项目的 web 服务。希望通过本文的步骤,您能顺利完成多级子域名的配置和部署。


