He leído algunos artículos que recomiendan usar proxy inverso (como nginx ) antes de la aplicación Node.js (como ese: Ventajas de un proxy inverso frente a Node.JS ). Eso es mejor (al menos en términos de seguridad) que ejecutar Node.js y exponerlo.
Sin embargo, ejecutar la aplicación Node.JS dentro de un contenedor Docker debería evitar los problemas de seguridad (porque la aplicación se ejecuta dentro de un contenedor y está aislada del sistema host).
Entonces, mi pregunta es: ¿hay beneficios de usar un proxy inverso mientras se ejecuta la aplicación Node.js en un contenedor Docker? Y si es así, ¿cómo puede mejorar mi aplicación?
Cada vez que tuve que configurar Nginx como proxy para contenedores Docker, no solo fue por el aspecto de seguridad, que como mencionaste, está contenido en el contenedor Docker, sino también para facilitar la comunicación del sistema distribuido.
En una arquitectura estándar, tiene un contenedor API, un contenedor IDP y un contenedor Frontend (supongamos que se trata de una aplicación web). Todo está detrás de Nginx. IDP, API y Frontend están expuestos al tráfico externo... pero aquí viene la parte divertida. Digamos que desea tener un servicio adicional ejecutándose en un contenedor diferente (un servicio de geolocalización, ETL o cualquier otro). Ese contenedor no necesita estar expuesto al público. Solo los contenedores internos pueden hablar con él.
En el escenario anterior, una solicitud llegará al frontend, el frontend enviará la(s) solicitud(es) a la API, la API verificará el token con el IDP (llamada interna), si no está autorizado, redirigirá el frontend al IDP (autenticación de 3 patas) o simplemente devuelva 403 y haga que el usuario se vuelva a autenticar (autenticación de 2 patas) enviando las credenciales a la API nuevamente. Luego, si el usuario necesita llamar a cualquier servicio adicional, todas las llamadas se realizarán primero a través de la API, O se pueden asignar en Nginx para acceder al servicio directamente, solo asegúrese de que el usuario esté autenticado/autorizado para usar el servicio.
Espero que eso arroje algo de luz sobre un uso particular de Nginx. Tenga en cuenta que este es solo un caso de uso, pero Nginx podría usarse para muchos otros propósitos.