Așadar, încercând să setez Nginx ca proxy invers folosind docker - am trei containere node js (unul frontend și două servicii backend), serviciul frontend apelează cele două servicii backend. Deci vreau ca nginx să redirecționeze către front-end (care este o aplicație web), dar de fiecare dată când încerc să trimit ceva, primesc o eroare 502 de gateway greșită. Când execut direct în containerele docker, pot trimite ping la celelalte containere prin dns_hostname sau adresa IP (pe care o iau din docker inspect) Iată o versiune editată atât a docker-compose, cât și a nginx.conf.
versiune: "3.8"
Servicii:
în față:
imagine: frontend
nume gazdă: frontend
env_file:
/.env
retele:
- rețea
repornire: la eșec
expune:
- "3000"
container_name: frontend
backend-service-01:
imagine: backend-service-01
numele gazdă: backend-service-01
env_file:
./backend-service-01/.env
retele:
- rețea
repornire: la eșec
container_name: backend-service-01
backend-service-02:
imagine: backend-service-02
numele gazdă: backend-service-02
env_file:
./backend-service-02/.env
retele:
- rețea
repornire: la eșec
container_name: backend-service-02
nginx-proxy:
imagine: nginx:stable-alpine
Nume gazdă: nginx-proxy
retele:
- rețea
repornire: la eșec
volume:
- /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
porturi:
- 80:80
- 443:443
container_name: nginx-proxy
depinde de:
- în față
- backend-service-01
- backend-service-02
retele:
reţea:
De asemenea, aici este fișierul nginx conf pe care îl folosesc:
worker_proceses auto;
pid /run/nginx.pid;
includ /etc/nginx/modules-enabled/*.conf;
evenimente {
conexiuni_muncitor 1024;
}
http {
frontend în amonte {
server frontend: 3000;
}
Server {
# Directiva de ascultare a portului 443 (TLS)
asculta 443 ssl;
asculta [::]:443 ssl;
ssl_certificate /etc/nginx/crt_file.crt;
ssl_certificate_key /etc/nginx/priv_key.key;
# Unde stocăm error.log și access.log
error_log /var/log/nginx/error.log;
access_log /var/log/nginx/access.log;
Locație / {
root /usr/src/app/public/;
proxy_pass https://frontend;
}
}
}
Am făcut aproape totul pentru a exclude o problemă de rețea, deoarece pot trimite ping atât la adresa IP, cât și la numele de gazdă docker din interiorul containerului nginx (folosind docker exec -it nginx-proxy sh) dacă cineva are sugestii despre ce să încerc în continuare sau pot vedea clar dacă fac ceva greșit ar fi foarte apreciat.