Vì vậy, hãy cố gắng đặt Nginx làm proxy ngược bằng cách sử dụng docker - Tôi có ba bộ chứa nút js (một giao diện người dùng và hai dịch vụ phụ trợ), dịch vụ giao diện người dùng gọi hai dịch vụ phụ trợ. Vì vậy, tôi muốn nginx chuyển hướng đến giao diện người dùng (là ứng dụng web), nhưng mỗi khi tôi cố gửi thứ gì đó, tôi lại gặp lỗi 502 cổng xấu. Khi tôi thực hiện trực tiếp vào các bộ chứa docker, tôi có thể ping các bộ chứa khác thông qua dns_hostname hoặc địa chỉ ip (mà tôi lấy từ docker examine) Đây là phiên bản đã chỉnh sửa của cả docker-compose và nginx.conf của tôi
phiên bản: "3.8"
dịch vụ:
giao diện người dùng:
hình ảnh: frontend
tên máy chủ: giao diện người dùng
env_file:
/.env
mạng:
- mạng
khởi động lại: khi thất bại
lộ ra:
- "3000"
container_name: lối vào
dịch vụ phụ trợ-01:
hình ảnh: dịch vụ phụ trợ-01
tên máy chủ: dịch vụ phụ trợ-01
env_file:
./backend-service-01/.env
mạng:
- mạng
khởi động lại: khi thất bại
container_name: dịch vụ phụ trợ-01
dịch vụ phụ trợ-02:
hình ảnh: dịch vụ phụ trợ-02
tên máy chủ: dịch vụ phụ trợ-02
env_file:
./backend-service-02/.env
mạng:
- mạng
khởi động lại: khi thất bại
container_name: dịch vụ phụ trợ-02
nginx-proxy:
hình ảnh: nginx:ổn định-alpine
tên máy chủ: nginx-proxy
mạng:
- mạng
khởi động lại: khi thất bại
khối lượng:
- /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
cổng:
- 80:80
- 443:443
container_name: nginx-proxy
phụ thuộc:
- giao diện người dùng
- dịch vụ phụ trợ-01
- dịch vụ phụ trợ-02
mạng:
mạng:
Ngoài ra, đây là tệp conf nginx tôi đang sử dụng:
worker_processes tự động;
pid /run/nginx.pid;
bao gồm /etc/nginx/modules-enabled/*.conf;
sự kiện {
công_nhân kết_nối 1024 ;
}
http {
giao diện ngược dòng {
giao diện máy chủ: 3000;
}
người phục vụ {
# Nghe Chỉ thị trên Cổng 443 (TLS)
nghe 443 ssl;
nghe [::]:443 ssl;
ssl_certificate /etc/nginx/crt_file.crt;
ssl_certificate_key /etc/nginx/priv_key.key;
# Nơi chúng tôi lưu trữ error.log và access.log
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
địa điểm / {
gốc /usr/src/app/public/;
proxy_pass https://frontend;
}
}
}
Tôi gần như đã làm mọi thứ để loại trừ sự cố mạng, vì tôi có thể ping cả địa chỉ IP và tên máy chủ docker giao diện người dùng từ bên trong bộ chứa nginx (sử dụng docker exec -it nginx-proxy sh) thử làm gì tiếp theo hoặc họ có thể thấy rõ nếu tôi làm sai điều gì đó thì điều đó sẽ được đánh giá cao.