Tengo un frontend angular y un backend node.js, que quiero implementar para clientes en diferentes países. Necesitamos para cada país un contenedor frontend y backend. Entonces, la idea es que nginx debería redirigir al contenedor correcto dentro del entorno de composición de docker según la ruta:
ejemplo.com/us/frontend -> us contenedor frontend
ejemplo.com/us/backend -> nosotros contenedor backend
ejemplo.com/fr/frontend -> fr contenedor frontend
ejemplo.com/fr/backend -> fr contenedor backend ...
He implementado hasta ahora:
docker-compose.yml
version: "3" services: test-proxy: container_name: test-proxy image: nginx:latest depends_on: - example-frontend-us # References the service name. volumes: - ./config/nginx.conf:/etc/nginx/nginx.conf - ./content:/usr/share/nginx/html ports: - 80:80 # Publishs only port 80 outside of docker compose context. example-frontend-us: container_name: example-frontend-us image: angular-frontend ports: - 8081:80nginx.conf:
http { server { listen 80; server_name localhost 127.0.0.1; location = / { root /usr/share/nginx/html; try_files $uri /index.html; } location /us/frontend { proxy_pass http:/example-frontend-us:8081; proxy_set_header X-Forwarded-For $remote_addr; } } }Si abro el navegador en localhost/us/frontend obtengo una respuesta 502 Bad Gateway
Si abro el navegador en localhost: 8081, la interfaz está funcionando.
¿Que esta mal aquí? ¿Cómo puedo lograr que nginx esté enrutando a los contenedores correctos?
Dentro de la red virtual creada por docker compose, usa los números de puerto internos. Asi que
proxy_pass http:/example-frontend-us:8081;debiera ser
proxy_pass http://example-frontend-us:80;(también te falta una barra diagonal en http://)
Finalmente, no necesita mapear el puerto en example-frontend-us a menos que desee poder acceder a él directamente y omitir nginx.