插件窝 干货文章 docker nginx如何部署多个项目

docker nginx如何部署多个项目

project Nginx image 项目 52    来源:    2025-04-25

Docker Nginx 部署多个项目方案

在 Docker 中使用 Nginx 部署多个项目主要有以下几种方法:

方法一:使用多个 server 块配置

这是最常用的方法,通过 Nginx 的配置文件为每个项目设置不同的 server 块。

  1. 创建 Nginx 配置文件 (nginx.confconf.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;
    }
}
  1. Docker Compose 示例:
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 容器

每个项目使用独立的 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 作为反向代理

对于更复杂的多项目部署,可以考虑使用 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"

最佳实践建议

  1. 为每个项目使用单独的配置文件,放在 conf.d/ 目录下
  2. 使用环境变量管理不同环境的配置
  3. 为生产环境配置 HTTPS
  4. 考虑使用 Let's Encrypt 自动管理 SSL 证书
  5. 设置适当的日志轮转和监控

常见问题解决

  1. 502 Bad Gateway: 检查后端服务是否正常运行,端口是否正确
  2. 403 Forbidden: 检查文件权限和 Nginx 配置中的 root 目录设置
  3. 配置不生效: 检查配置语法 nginx -t,然后重新加载 nginx -s reload

希望这些方案能帮助你成功部署多个项目!根据你的具体需求选择最适合的方法。