因此,尝试使用 docker 将 Nginx 设置为反向代理 - 我有三个节点 js 容器(一个前端和两个后端服务),前端服务调用两个后端服务。所以我希望 nginx 重定向到前端(这是 Web 应用程序),但每次我尝试发送一些东西时,我都会收到 502 bad gateway 错误。当我直接执行到 docker 容器中时,我可以通过 dns_hostname 或 ip 地址(我从 docker inspect 获取)ping 其他容器这是我的 docker-compose 和我的 nginx.conf 的编辑版本
version: "3.8"
services:
frontend:
image: frontend
hostname: frontend
env_file:
/.env
networks:
- network
restart: on-failure
expose:
- "3000"
container_name: frontend
backend-service-01:
image: backend-service-01
hostname: backend-service-01
env_file:
./backend-service-01/.env
networks:
- network
restart: on-failure
container_name: backend-service-01
backend-service-02:
image: backend-service-02
hostname: backend-service-02
env_file:
./backend-service-02/.env
networks:
- network
restart: on-failure
container_name: backend-service-02
nginx-proxy:
image: nginx:stable-alpine
hostname: nginx-proxy
networks:
- network
restart: on-failure
volumes:
- /data/nginx/conf/nginx.conf:/etc/nginx/nginx.conf
- /data/nginx/certs/crt_file.crt:/etc/nginx/crt_file.crt
- /data/nginx/certs/priv_key.key:/etc/nginx/priv_key.key:ro
ports:
- 80:80
- 443:443
container_name: nginx-proxy
depends_on:
- frontend
- backend-service-01
- backend-service-02
networks:
network:
这里也是我正在使用的 nginx conf 文件:
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
events {
worker_connections 1024;
}
http {
upstream frontend {
server frontend:3000;
}
server {
# Listen Directive on Port 443 (TLS)
listen 443 ssl;
listen [::]:443 ssl;
ssl_certificate /etc/nginx/crt_file.crt;
ssl_certificate_key /etc/nginx/priv_key.key;
# Where we store our error.log and access.log
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
location / {
root /usr/src/app/public/;
proxy_pass https://frontend;
}
}
}
我几乎已经做了所有事情来排除网络问题,因为我可以从 nginx 容器内部 ping ip 地址和前端 docker 主机名(使用 docker exec -it nginx-proxy sh)是否有人有任何建议接下来要尝试什么,或者如果我做错了什么,他们可以清楚地看到,我们将不胜感激。