永恒笔记

nginx部署到容器中的网络问题
Edited: Saturday 7 June 2025

问题:nginx将请求反向代理至其他容器内的server,该如何配置。

启用服务a容器,监听3002端口

启用nginx容器,监听80端口

将80端口的请求反向代理到容器a的3002端口,则需要配置一下nginx.conf中的upstream,以及让容器a和容器b处于同一个docker network下。

核心就是,在容器b中,可以识别到{服务b的容器名:3002}。

 1user  nginx;
 2worker_processes  auto;
 3
 4error_log  /var/log/nginx/error.log warn;
 5pid        /var/run/nginx.pid;
 6
 7events {
 8    worker_connections  1024;
 9}
10
11http {
12    include       /etc/nginx/mime.types;
13    default_type  application/octet-stream;
14
15    log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
16                      '$status $body_bytes_sent "$http_referer" '
17                      '"$http_user_agent" "$http_x_forwarded_for"';
18
19    access_log  /var/log/nginx/access.log  main;
20
21    sendfile        on;
22    #tcp_nopush     on; // Uncomment if you want to disable TCP push
23    keepalive_timeout  65;
24
25    #gzip  on; // Uncomment if you want to enable gzip compression
26
27    upstream myapp {
28        server chatgpt-web:3002;
29    }
30    server {
31        listen       80;
32        server_name  localhost;
33
34        location / {
35            root   /usr/share/nginx/html;
36            index  index.html index.htm;
37        }
38
39        error_page   500 502 503 504  /50x.html;
40        location = /50x.html {
41            root   /usr/share/nginx/html;
42        }
43    }
44
45    server {
46        listen       80;
47        server_name  chat1.oldwinter.top 35.77.211.36;
48
49        location / {
50            proxy_pass http://myapp;
51            proxy_set_header Host $host;
52            proxy_set_header X-Real-IP $remote_addr;
53            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
54        }
55    }
56}

通过docker-compose统一启动

 1version: '3'
 2
 3services:
 4  nginx:
 5    image: nginx
 6    ports:
 7      - "80:80"
 8    volumes:
 9      - /home/ubuntu/nginx/nginx.conf:/etc/nginx/nginx.conf
10    depends_on:
11      - chatgpt-web
12
13  chatgpt-web:
14    image: chenzhaoyu94/chatgpt-web # 总是使用 latest ,更新时重新 pull 该 tag 镜像即可
15    container_name: chatgpt-web
16    ports:
17      - 0.0.0.0:3002:3002