Usando Node.js sólo frente a mediante Nodo.js con Apache / Nginx


En qué casos se debe preferir usar Node.js solo como servidor en despliegue real?

Cuando se hace no se quiere usar Nodo.solo js, lo que juega mejor con Node.js? Apache o Nginx?

 175
Author: 7cows, 2013-05-27

4 answers

Hay varias buenas razones para colocar otro servidor web delante del Nodo.js:

  • No tener que preocuparse por privilegios/setuid para el nodo.proceso js. Normalmente solo root puede enlazar al puerto 80. Si deja que nginx / Apache se preocupe por comenzar como root, vincularse al puerto 80 y luego renunciar a sus privilegios de root, significa que su aplicación Node no tiene que preocuparse por ello.
  • Sirviendo archivos estáticos como imágenes, css, js y html. Nodo puede ser menos eficiente en comparación con el uso de un servidor web de archivos estáticos adecuado (Nodo también puede ser más rápido en escenarios seleccionados, pero esto es poco probable que sea la norma). Además de los archivos que sirven de manera más eficiente, no tendrá que preocuparse por manejar ETags o encabezados de control de caché de la manera que lo haría si estuviera repartiendo cosas fuera del nodo. Algunos marcos pueden manejar esto por usted, pero usted querría estar seguro. A pesar de todo, todavía probablemente más lento.
  • Como Matt Sergeant mencionó en su respuesta, puede mostrar más fácilmente páginas de error significativas o vuelva a recurrir a un sitio estático si su servicio de nodo falla. De lo contrario, los usuarios pueden obtener una conexión con tiempo de espera.
  • Ejecutar otro servidor web frente a Node puede ayudar a mitigar los fallos de seguridad y los ataques DoS contra Node. Para un ejemplo del mundo real, CVE-2013-4450 es prevenido ejecutando algo como Nginx delante del nodo.

Voy a caveat el segundo punto diciendo que probablemente debería servir sus archivos estáticos a través de una CDN, o desde detrás de un servidor de almacenamiento en caché como Varnish. Si estás haciendo esto realmente no importa si el origen es Node o Nginx o Apache.

Advertencia con nginx específicamente: si está utilizando websockets, asegúrese de usar una versión reciente de nginx (>= 1.3.13), ya que solo acaba de agregar soporte para actualizar una conexión para usar websockets.

 166
Author: pauljz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-26 21:01:59

Solo para agregar una razón más a la respuesta de pauljz, uso un servidor front-end para que pueda servir páginas de error 502 cuando estoy reiniciando el servidor back-end o se bloquea por alguna razón. Esto permite que los usuarios nunca obtengan un error sobre no poder establecer una conexión.

 54
Author: Matt Sergeant,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-27 16:05:30

Creo que usar Node para servir archivos estáticos está bien en todas las circunstancias siempre y cuando sepas lo que estás haciendo. Es sin duda un nuevo paradigma para utilizar el servidor de aplicaciones para servir a los archivos estáticos como tantos (cada?) las tecnologías de la competencia (PHP, Ruby, Python, etc.) requieren un servidor web como HTTPD o Nginx delante del servidor o servidores de aplicaciones.

Cada razón objetiva que he leído en contra de servir archivos estáticos con Nodo gira en torno a la idea de usar lo que usted sabe mejor o usar lo que se percibe como mejor probado / más estable. Estas son razones muy válidas en la práctica, pero tienen poca relevancia puramente técnica.

A menos que encuentre una característica que sea posible con un servidor web clásico que no sea posible con Node (y dudo que lo haga), elija lo que mejor sabe o con lo que prefiere trabajar, ya que cualquier enfoque está bien.

En cuanto a Nginx vs Apache will ellos "jugarán" con el Nodo igual. Usted debe compararlos sin respecto al Nodo.

 24
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-05 21:03:24

Creo en hechos y puntos de referencia De acuerdo con pauljz nginx es mejor en el servicio de archivos estáticos, me temo que ciertamente no es cierto de hecho su completamente opuesto a lo que dijo por favor echa un vistazo al enlace de bechmarks .Cómo node js escaló 2 veces mejor que nginx (4,250 trans / s vs 2,118 trans / s) - especialmente en los niveles de concurrencia más altos. También consulte los tiempos de respuesta promedio (0.14 s vs 0.23 s), el tiempo de transacción más largo (1.10 s vs 13.95 s) y los números de disponibilidad de transacción, todo en nodo.el favor de Js. Para más información por favor siga el enlace http://centminmod.com/siegebenchmarks/2013/020313 /

 7
Author: Yousaf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-16 22:39:12