visual usando tutorial studio proyecto node cómo crear node.js express vhosts multiple-domains http-proxy

node.js - usando - ¿Cómo debería organizar múltiples servidores Express en el mismo sistema?



node js visual studio 2017 tutorial (2)

Estoy usando un servidor para alojar varias aplicaciones web Node.js, que se distribuyen en varios dominios. Mi práctica actual es ejecutar un servidor Express para cada aplicación en un puerto diferente y ejecutar un servidor base que simplemente enruta (redirecciona) solicitudes al puerto correcto / servidor Express. Esto funciona, pero significa que mi servidor base está enrutando cada solicitud HTTP (y redirigiéndola manualmente), y que mis usuarios ven mis aplicaciones como alojadas en [hostname.com]: 8000.

Después de investigar un poco, descubrí que puedo usar http-proxy para mis necesidades de enrutamiento, pero aún me gustaría saber si hay una mejor práctica para ejecutar múltiples servidores Express en el mismo sistema. Así es como estoy planeando hacerlo:

Cada aplicación web tendrá su propia carpeta, con una estructura completa de carpetas Express (app.js, rutas, vistas, etc.). Las aplicaciones se agruparán por dominio, por lo que una estructura de carpeta de ejemplo sería:

hostname.com/ app.js routes/ views/ ... app1/ app1.js routes/ views/ ... app2 ... hostname2.com/ app.js routes/ views/ ...

Tendré que ejecutar cada app.js por separado con el nodo (o con forever , que estoy usando actualmente), y cada uno tendrá que usar un puerto diferente internamente, con redireccionamientos de aplicaciones cruzadas apuntando al puerto del aplicación de destino

Entonces, ese es mi plan actual. ¿Cuáles son los problemas con esto y qué peligros debería tratar de evitar? Lo más importante, ¿existe una solución establecida para este problema, el problema de alojar múltiples aplicaciones web en el mismo sistema con Node.js / Express?

EDITAR: Planeo usar eventualmente WebSockets y HTTPS, y la cantidad de ancho de banda que mi configuración puede admitir es de poca importancia para mí: este es un servidor de desarrollo (al menos por ahora). Gracias a David Ellis por mencionar el tema de WebSockets.

SEGUNDA EDICIÓN: Gracias a EhevuTov y David Ellis por sus respuestas, que fueron de gran ayuda. Todavía me estoy conformando con una estructura general para mi aplicación, y parece que esa pregunta se aborda con cierto detalle con esta pregunta de StackOverflow

TERCER EDICIÓN: He recorrido un largo camino desde que publiqué esta pregunta (aunque todavía tengo mucho más por delante). ¡Mira este archivo en mi repositorio de GitHub , que aprovecha lo que aprendí de las respuestas a esta pregunta!


Dado que Express usa Connect , estoy bastante seguro de que puede usar el middleware de host virtual de Connect. Funciona de manera similar a otros módulos vhost en otros productos. No tengo múltiples dominios para probar y mostrarle el código correcto, pero creo que es algo como esto:

express.createServer() .use(express.vhost(''hostname1.com'', require(''/path/to/hostname1'').app) .use(express.vhost(''hostname2.com'', require(''/path/to/hostname2'').app) .listen(80)

Si llega al punto en que un servidor Express no es suficiente, investigue usando el Node.Cluster de la API. Si eso tampoco es suficiente, entonces la práctica actual es poner un proxy inverso asnyc como Nginx en frente de sus servidores Express y apuntar los proxies a sus servidores Express.


Si no necesita usar WebSockets (o cualquier característica HTTP 1.1, realmente), puede usar NginX como su proxy en su lugar .

La ventaja es la carga total que NginX puede manejar en comparación con el nodo es mayor (básicamente está compilado y especializado para este tipo de cosas), pero se pierde la capacidad de transmitir cualquier información (enviando trozos más pequeños a la vez).

Para un sitio más pequeño, o si no está seguro de las características que necesitará en el futuro, probablemente sea mejor seguir con node-http-proxy y solo cambiar a NginX si puede demostrar que el proxy es el cuello de botella en su servidor. Afortunadamente, NginX no es difícil de configurar si lo necesitas más tarde.