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

配置Nginx将app.domain.com:3001请求转发至Docker化Node-Express服务

Node-Express服务的Nginx反向代理配置方案

需求说明

  • Node-Express服务运行在Docker容器中,已暴露端口3001
  • Nginx通过sudo apt install nginx安装在宿主机
  • 需要将app.domain.com:3001的请求转发至localhost:3001
  • API响应需保留.domain.com域名,以支持app.domain.com上的Angular应用设置httpOnly Cookie
  • 通过Nginx的conf.d目录配置实现

现有Docker Compose配置

version: "3"

services:
  container1:
    image: node:18.12-alpine
    working_dir: /usr/src/app
    container_name: container1
    depends_on:
      - container_mongodb
    restart: on-failure
    env_file: .env
    ports:
      - "$APP_PORT:$APP_PORT"
    volumes:
      - .:/usr/src/app
    networks:
      - network1
    command: ./wait-for.sh container_mongodb:$MONGO_PORT -- npm run dev
  container_mongodb:
    image: mongo:6.0.3
    container_name: container_mongodb
    restart: on-failure
    env_file: .env
    environment:
      - MONGO_INITDB_ROOT_USERNAME=$MONGO_USERNAME
      - MONGO_INITDB_ROOT_PASSWORD=$MONGO_PASSWORD
    ports:
      - "$MONGO_EXPOSE_PORT:$MONGO_PORT"
    volumes:
      - container_mongodb_data:/data/db
      - ./src/config/auth/mongodb.key:/data/mongodb.key
    networks:
      - network1
    entrypoint:
      - bash
      - -c
      - |
        cp /data/mongodb.key /data/mongodb.copy.key
        chmod 400 /data/mongodb.copy.key
        chown 999:999 /data/mongodb.copy.key
        exec docker-entrypoint.sh $$@
    command: ["mongod", "--replSet", "rs0", "--bind_ip_all", "--keyFile", "/data/mongodb.copy.key"]
networks:
  network1:
    external: true

volumes:
  container_mongodb_data:

配置步骤

1. 创建Nginx代理配置文件

在宿主机的/etc/nginx/conf.d/目录下创建app-proxy.conf,写入以下内容:

server {
    listen 3001;
    server_name app.domain.com;

    location / {
        # 转发请求到本地3001端口(Docker映射的端口)
        proxy_pass http://localhost:3001;
        
        # 保留原始请求的Host头,确保Node服务识别正确域名
        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;

        # 将服务返回的Cookie域名替换为.domain.com,支持子域共享
        proxy_cookie_domain localhost .domain.com;
    }
}

2. 验证并重启Nginx

执行命令检查配置语法:

sudo nginx -t

若返回nginx: configuration file /etc/nginx/nginx.conf test is successful,则重启Nginx使配置生效:

sudo systemctl restart nginx

3. 确认Docker端口映射

确保.env文件中的APP_PORT设置为3001,保证容器端口与宿主机端口正确映射。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.03 23:45:48