¿Por qué colocamos nginx frente a un servidor de aplicaciones NodeJS o Go?

Un servidor web Nginx (o cualquier otro) puede hacer mucho por usted, si lo configura correctamente. Mi primera razón para usar un servidor Nginx frente a una implementación de NodeJS es que espero que mi servidor pueda servir a más de un sitio web a la vez. Si obstruyo el puerto 80 con mi NodeJS, no puedo servir nada más en mi puerto web predeterminado. Al usar un poco de lógica de host virtual en mi configuración de Nginx, puedo tener un número casi ilimitado de servicios web en una sola caja.

La segunda razón es que puedo servir mis archivos estáticos directamente, sin tener que pasar por mi aplicación NodeJS. Incluso puedo almacenar los archivos estáticos de acceso más común en la memoria y servirlos a la velocidad del rayo, con una carga mínima del procesador.

A continuación, puedo manejar mis certificados SSL a través de Nginx. Es posible entregar sus certificados a través de NodeJS, pero este realmente no debería ser su trabajo: deje que su aplicación se concentre en hacer lo que sea que esté haciendo, y deje que Nginx se preocupe por SSL.

Una vez que mi aplicación comienza a crecer, incluso puedo usar Nginx (o más probablemente un equilibrador de carga más avanzado) para asignar recursos en varios servidores, lo que me permite escalar de manera muy eficiente.

Finalmente, encaja con la filosofía de Unix: “Escribir programas que hagan una cosa y lo hagan bien”.

Algunas razones incluyen:

  • Los activos estáticos se pueden servir de manera fácil y eficiente sin involucrar al servidor de aplicaciones.
  • Obtiene flexibilidad en la configuración de las características existentes de Apache o Nginx, por ejemplo, la capacidad de usar uno o más proxies inversos para definir su espacio de URL y asignar puertos.
  • El servidor web puede realizar una cierta cantidad de autoescalado (por ejemplo, por procesos).
  • El servidor web puede hacer el registro.

En resumen, hay muchas características que proporciona Apache o Nginx que de lo contrario tendría que incorporar a su servicio. La separación de las preocupaciones es importante.

Jason Norwood-Young da una muy buena respuesta a esta pregunta.

Solo agregaría que consideraría que nginx es un software mucho más estable y seguro, y me siento mucho mejor si las conexiones a Internet llegan a un servidor nginx que el servidor de aplicaciones directamente.