De acuerdo aesteEn un sitio web, cuando se configura una red de contenedores, cada contenedor escucha el puerto 80 de forma predeterminada y esto puede generar conflictos entre el tráfico entrante. Esto se resuelve utilizando el proxy inverso de Nginx (que también escucha en el puerto 80) que busca la variable VIRTUAL_HOST y enruta el tráfico al contenedor correcto.
Pero esto es lo que no entiendo. Si Nginx también escucha en el puerto 80 (como todos los demás contenedores), ¿cómo resuelve eso el problema del conflicto de tráfico? Dado que Nginx está escuchando en el puerto 80, ¿no debería persistir el problema del conflicto? ¿Nginx captura automáticamente todo el tráfico entrante independientemente del número de puerto de los otros contenedores? Todo este concepto me parece bastante confuso.
Respuesta1
Si Nginx también escucha en el puerto 80 (como todos los demás contenedores), ¿cómo resuelve eso el problema del conflicto de tráfico?
Quizás estoy leyendo mal el artículo, pero parece probable que "todos los demás contenedores" no estén escuchando en el puerto 80 (énfasis añadido):
De forma predeterminada, todos los servicios Docker escuchan en el puerto 80, lo que crearía conflictos para el tráfico entrante. Puedes cambiar el puerto de escucha, por supuesto, pero nadie quiere escribir coolwebsite.com:34567 para acceder a su sitio favorito.
¿Qué pasaría si, en cambio, pudiera usar nginx para enrutar el tráfico que llega a coolwebsite.com a un contenedor único que escucha en el puerto 34567 y enrutar el tráfico que llega a anothercoolwebsite.net a un segundo contenedor que escucha 45678?
En este escenario, Nginx parece ser el único servidor web que escucha en el puerto 80.
¿Nginx captura automáticamente todo el tráfico entrante independientemente del número de puerto de los otros contenedores?
Nginx capturaría todo el tráfico en el puerto 80. Es decir, http://coolwebsite.com
es efectivamente equivalente a http://coolwebsite.com:80
la mayoría del software. Luego, Nginx retransmitiría el tráfico entre el puerto 80 y cualquier puerto en el que se estuvieran ejecutando los contenedores Docker, dependiendo del nombre de host.