proxy_pass jwilder inverso compose certs balancing nginx docker reverse-proxy docker-compose

nginx - jwilder - proxy_pass docker



Proxy inverso de NGINX que falla con contenedores vinculados Docker (2)

Tengo el siguiente docker-compose.yml :

node1: build: ./node links: - redis ports: - "8080" node2: build: ./node links: - redis ports: - "8080" service1: build: ./service links: - redis ports: - "8383" redis: image: redis ports: - "6379" nginx: build: ./nginx links: - node1:node1 - node2:node2 - service1:service1 ports: - "80:80"

Después de ejecutar esto y ejecutar docker ps obtengo lo siguiente:

080d9d7dc2e0 dockerworkflow_nginx:latest "nginx -g ''daemon of 5 minutes ago Up 5 minutes 0.0.0.0:80->80/tcp, 443/tcp dockerworkflow_nginx_1 8c25bfdb9d00 dockerworkflow_node1:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33023->8080/tcp dockerworkflow_node1_1 4ae817be2a63 dockerworkflow_service1:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33022->8383/tcp dockerworkflow_service1_1 91ff238fe3f6 dockerworkflow_node2:latest "nodemon /src/index. 6 minutes ago Up 6 minutes 0.0.0.0:33021->8080/tcp dockerworkflow_node2_1 fe0c7e02c860 redis:latest "/entrypoint.sh redi 6 minutes ago Up 6 minutes 0.0.0.0:33020->6379/tcp dockerworkflow_redis_1

Todo parece ser bueno hasta ahora.

El nginx.conf que estoy usando tiene el siguiente aspecto:

worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location / { proxy_pass http://node1; } location /a/ { proxy_pass http://node2; } location /b/ { proxy_pass http://service1; } } }

Todo esto debería estar realmente haciendo es lo siguiente:

Si ingreso http://{host-ip}/ , el contenedor node1 se reenvía a la solicitud.

Si ingreso http://{host-ip}/a/ entonces el contenedor node2 se reenvía a la solicitud.

Si ingreso http://{host-ip}/b/ , el contenedor service1 se reenvía la solicitud.

En este momento, obtendré 502 Bad Gateway si pruebo algo.


Creo que deberías especificar los puertos dentro de cada proxy_pass .

worker_processes 4; events { worker_connections 1024; } http { server { listen 80; location / { proxy_pass http://node1:8080; } location /a/ { proxy_pass http://node2:8080; } location /b/ { proxy_pass http://service1:8383; } } }


Pude descubrir la solución y resultó ser algo estúpido que no apareció en ningún registro y me resultó difícil encontrarlo.

A continuación se muestra el archivo nginx.conf actualizado.

worker_processes 4; events { worker_connections 1024; } http { upstream node_app { server node1:8080; } upstream service_app { server service1:8383; } server { listen 80; location / { proxy_pass http://node_app/; include /etc/nginx/proxy_params; } location /a/ { proxy_pass http://node_app/; include /etc/nginx/proxy_params; } location /b/ { proxy_pass http://service_app/; include /etc/nginx/proxy_params; } } }

No estoy seguro si la inclusión es necesaria en este punto, pero el final / al final de la directiva proxy_pass parece ser el truco al final del día.