2011-07-20 12 views
37

¿Cuáles son las ventajas de tener nginx u otro servidor web ejecutándose como un proxy inverso frente al Node.JS? ¿Qué proporciona?Ventajas de un proxy inverso frente a Node.JS

(Esta pregunta es para asuntos relacionados con aplicaciones web, no páginas web).

Gracias.

+0

He tenido curiosidad sobre lo mismo recientemente. Buena pregunta. –

+0

Gracias Dave. Las grandes mentes piensan lo mismo que dicen, pero supongo que somos bastante curiosos. ;-) – Phil

Respuesta

33

creo que el mayor beneficio es que usted es entonces capaz de utilizar el mismo puerto (80) para múltiples aplicaciones. De lo contrario, necesitaría una nueva dirección IP para cada aplicación nodejs que tenga. Dependiendo de cómo configure las cosas, también puede configurar diferentes carpetas y subdominios para diferentes aplicaciones nodej que se ejecutan en diferentes puertos. Si estás construyendo algo grande o complejo, esto es bastante bueno. Imagine que puede ejecutar sus API en una aplicación de nodo, su sitio web de otra y el sitio web que inició sesión (área de miembro, tablero, etc.) en otra aplicación. Su equilibrador de carga puede determinar quién necesita ir a dónde (example.com/api* -> api.js, example.com/dashboard* -> dashboard.js, ejemplo.com -> app.js). Esto no solo es útil para escalar, sino que también cuando las cosas se rompen, no todo se rompe a la vez.

Para la madurez, meh. Nodejs + forever + node-http-proxy = Increíble. Ejecute 1 servidor proxy para todas sus aplicaciones con una configuración/complejidad mínima (menor probabilidad de error). Entonces diviértete con todo lo demás. No te olvides de cortafuegos de tus puertos internos, aunque ;).

Algunas personas notan el equilibrio de carga, lo cual es cierto, es un beneficio. Sin embargo, el balanceo de carga no es algo de lo que la mayoría de la gente se beneficiará, ya que un único subproceso de nodos con bloqueo y sin bloqueo puede manejar cargas bastante impresionantes. Realmente no consideraría esto como una diferencia si fuera tú. El equilibrio de carga es fácil de implementar cuando lo necesita, pero por lo demás es completamente inútil hasta que lo haga.

También tenga en cuenta que, si va con una solución proxy no nodal (nginx, tornado, etc.), asegúrese de NO utilizar uno que bloquee. Apache blocks. Nginx no. No querrá descartar uno de los mayores beneficios de usar nodejs en primer lugar en un servidor defectuoso.

+0

Hola, gracias por la respuesta y las explicaciones, es muy inspirador y contiene grandes ideas. ¿Puede decirnos cuál sería el caso de uso de "node-http-proxy" si nodee solo se ejecuta en una máquina? ¿Qué haría entonces? – Phil

+0

Si solo se está ejecutando en 1 máquina, entonces simplemente está actuando como un proxy local (como lo haría Apache o Nginx con Node), ¡excepto que también está construido en un nodo! ':)' Esto significa que tienes un control total sobre la pila de tu nodo, tus aplicaciones no requieren modificaciones (simplemente funcionan) y puedes ejecutar muchas, muchas, muchas aplicaciones en una sola dirección/puerto IP (80). Para configuraciones más complicadas, puede construir su propio equilibrador de carga (¡qué bueno !?) y distribuir el trabajo de la manera que mejor se adapte a su aplicación. –

+0

¡Adelante! Eso suena realmente increíble. ¡Aclamaciones! – Phil

9

Tener un software más maduro como proxy es mejor para la seguridad y la fiabilidad. Nginx, Apache y otros han sido probados contra una multitud de casos y utilizados en producción durante años.

También puede usar características de estos servidores web que de lo contrario tendría que implementar usted mismo o usar un módulo node.js. Al igual que en el almacenamiento en caché, estadísticas, balanceo, etc.

Por otro lado, se perderían algunas características de node.js, funciones en tiempo real como websockets (en el puerto 80, aún se pueden usar otros puertos), búfer de página y dependiendo del proxy inverso utilizado, control sobre el almacenamiento en caché y los encabezados.

Editar:

+0

Hola, tiene mucho sentido. Gracias por compartir esta gran explicación.Sin embargo, ¿puede explicarnos de qué tipo de ventajas de seguridad y confiabilidad estamos hablando en este caso? – Phil

+0

Las ventajas de seguridad y fiabilidad provienen del hecho de que esos programas son más antiguos y se han utilizado en producción durante más tiempo que node.js; por regla general, esto significa que se han probado más casos de uso y se han solucionado posibles errores. Aunque es una regla general, hay excepciones. En mi humilde opinión, puede usar node.js sin un proxy inverso, solo tenga cuidado con su código y siempre mantenga la última versión. –

+3

Y escriba código sólido. La mayoría de las veces, los problemas de seguridad no están relacionados con su servidor web, sino con su aplicación. Por lo tanto, no es un defecto con nodejs si escribe código inseguro, no más de lo que es culpa de Apache cuando las personas escriben PHP incorrecto. Esto es muy importante de recordar, y es donde la mayoría de la gente sale mal. –

Cuestiones relacionadas