配置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
相关产品推荐
相关产品推荐

