在 Docker 中使用 Nginx 部署多个项目主要有以下几种方法:
这是最常用的方法,通过 Nginx 的配置文件为每个项目设置不同的 server 块。
nginx.conf
或 conf.d/
目录下的单独文件):# 项目1配置
server {
listen 80;
server_name project1.example.com;
location / {
proxy_pass http://project1:3000; # 假设项目1运行在3000端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
# 项目2配置
server {
listen 80;
server_name project2.example.com;
location / {
proxy_pass http://project2:4000; # 假设项目2运行在4000端口
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
}
version: '3'
services:
nginx:
image: nginx:latest
ports:
- "80:80"
- "443:443"
volumes:
- ./nginx.conf:/etc/nginx/nginx.conf
- ./conf.d:/etc/nginx/conf.d
depends_on:
- project1
- project2
project1:
image: your-project1-image
expose:
- "3000"
project2:
image: your-project2-image
expose:
- "4000"
如果不想使用不同域名,可以使用路径区分:
server {
listen 80;
server_name example.com;
location /project1/ {
proxy_pass http://project1:3000/;
proxy_set_header Host $host;
}
location /project2/ {
proxy_pass http://project2:4000/;
proxy_set_header Host $host;
}
}
每个项目使用独立的 Nginx 容器:
version: '3'
services:
nginx-project1:
image: nginx:latest
ports:
- "8080:80"
volumes:
- ./project1.conf:/etc/nginx/nginx.conf
depends_on:
- project1
nginx-project2:
image: nginx:latest
ports:
- "8081:80"
volumes:
- ./project2.conf:/etc/nginx/nginx.conf
depends_on:
- project2
project1:
image: your-project1-image
expose:
- "3000"
project2:
image: your-project2-image
expose:
- "4000"
对于更复杂的多项目部署,可以考虑使用 Traefik:
version: '3'
services:
traefik:
image: traefik:v2.5
command:
- --api.insecure=true
- --providers.docker
ports:
- "80:80"
- "8080:8080" # Dashboard
volumes:
- /var/run/docker.sock:/var/run/docker.sock
project1:
image: your-project1-image
labels:
- "traefik.http.routers.project1.rule=Host(`project1.example.com`)"
- "traefik.http.services.project1.loadbalancer.server.port=3000"
project2:
image: your-project2-image
labels:
- "traefik.http.routers.project2.rule=Host(`project2.example.com`)"
- "traefik.http.services.project2.loadbalancer.server.port=4000"
conf.d/
目录下nginx -t
,然后重新加载 nginx -s reload
希望这些方案能帮助你成功部署多个项目!根据你的具体需求选择最适合的方法。