Alojar múltiples sitios web utilizando Node.js Express

Estoy teniendo problemas para configurar dos diferentes Node.js aplicaciones con diferentes dominios. Tiene dos directorios

"/abc/" -> express-admin setup (backend) -> admin.abc.com

y

"/xyz/" -> express setup (frontend) -> abc.com

Necesito admin.abc.com a punto de expresar-configuración de administrador y abc.com para expresar la instalación. He vhost instalado y el sitio de la escucha en el puerto 80.

Han añadido

app.use(vhost('abc.com', app)); //xyz/app.js file
app.use(vhost('admin.abc.com', app)); //abc/app.js file

Mis problemas:

  • para siempre está instalado, cada vez que inicie tanto las aplicaciones, el segundo siempre está detenido. He intentado utilizar otro puerto para ambas aplicaciones, pero sigue teniendo el mismo error. De forma individual se ejecutan sin problemas.

  • Creo que mi configuración es demasiado complicado para redirección de dominio. Alguna sugerencia mejor? Puede ser tengo un maestro app.js archivo que puedo usar para la ruta de los dominios de sus respectivas aplicaciones sin necesidad de utilizar el app.js de cada una de las aplicaciones.

  • Todavía estás hosting de las aplicaciones en el mismo puerto, el uso de la misma interfaz de red. Así que cuando la segunda aplicación se inicia, siempre encontrará el puerto en uso. En caso de no utilizar un puerto diferente para el host, incluso cuando el uso de vhost? Consulte este ejemplo para obtener más detalles. Tal vez es mejor que use nodo-http-proxy, para mantener las aplicaciones totalmente independientes? Consulte este post para una comparación.
  • Gracias @veggiesaurus nodo-http-proxy debe ser el camino a seguir. Te permitirá saber, cómo va.
  • Por favor, no. He añadido una respuesta a la pregunta con un poco más de detalle, en caso de que alguien más viene a través de esta pregunta.
  • Por favor, considere la posibilidad de Nginx – una buena solución para el inicio de múltiples servidores de nodo dentro de un único servidor: stackoverflow.com/questions/5009324/node-js-nginx-what-now
InformationsquelleAutor Pradino | 2015-07-22

3 Kommentare

  1. 7

    No estoy seguro de cómo se está utilizando el vhost. Primero de todo con vhost enfoque, usted necesita para ejecutar sólo una express de la aplicación. No dos. Aquí es un ejemplo.

    var express = require('express');
    var vhost = require('vhost');
    
    /*
    edit /etc/hosts:
    
    127.0.0.1       api.mydomain.local
    127.0.0.1       admin.mydomain.local
    */
    
    //require your first app here
    
    var app1 = require("./app1");
    
    //require your second app here
    
    var app2 = require("./app2");
    
    //redirect.use(function(req, res){
    //  if (!module.parent) console.log(req.vhost);
    //  res.redirect('http://example.com:3000/' + req.vhost[0]);
    //});
    
    //Vhost app
    
    var appWithVhost = module.exports = express();
    
    appWithVhost.use(vhost('api.mydomain.local', app1)); //Serves first app
    
    appWithVhost.use(vhost('admin.mydomain.local', app2)); //Serves second app
    
    /* istanbul ignore next */
    if (!module.parent) {
      appWithVhost.listen(8000);
      console.log('Express started on port 8000');
    }

    Sólo necesita ejecutar el principal express app con vhost habilitados utilizando para siempre.

    • habrá problemas de rendimiento o de otros problemas, si esta misma configuración se utiliza para ejecutar un mayor número (por ejemplo, 20) de expresar apps? Y, vamos a suponer que 19 de ellos son muy livianos (express representación simple de Jade plantillas) – pero el 20 es un poco más complejo y requiere un poco más de la CPU. Si tengo 10 usuarios activos en cada uno de los 20 sitios, sería el 10 que está viendo, el más complicado de una de las causas de la ralentización de los espectadores de los otros 19?
    • El problema con el vhost es que todos estos independiente aplicaciones se ejecutan en el mismo espacio de usuario. Que es probablemente hay una necesidad de ejecutar en espacios separados (como suexec en apache), de modo que si una página web hackeados o accidentes, no puede infectar a los demás. Es posible que no importa mucho en este ejemplo, sin embargo. Eche un vistazo a las pm2: pm2.keymetrics.io/docs/uso/inicio/#usuario con permisos de
  2. 6

    Estás hosting de las aplicaciones en el mismo puerto, el uso de la misma interfaz de red. Así que cuando la segunda aplicación se inicia, siempre encontrará el puerto en uso. Si desea utilizar varias aplicaciones en el mismo puerto, cada uno necesita tener su propia interfaz de red. Cuando se utiliza vhost, usted todavía necesita para que escuche en un puerto diferente para cada aplicación. Ver este ejemplo para más detalles. Si desea sus aplicaciones para ser completamente independiente, es mejor que use nodo-http-proxy. Esto permite a un host de proxy en el puerto 80, que reenvía las solicitudes para expresar aplicaciones de escuchar en puertos diferentes. Si una de estas aplicaciones se bloquea, no se colgará la otra aplicación, a diferencia de los vhosts enfoque. Este post da un ejemplo de la aplicación usando el nodo-http-proxy.

  3. 6

    Gracias @veggiesaurus para que apunte a nodo-http-proxy. Disculpas por publicar tarde.

    Aquí es cómo he resuelto mi problema con nodo-http-proxy

    Estructura De Carpetas:

    • www/
      • server.js
      • abc/[express setup]
        • app.js
      • xyz/[express-configuración de administrador]
        • node_modules/express-admin/app.js

    «abc» y «xyz» tiene su propio programa de instalación y se ejecuta en el puerto x.x.x.x:3001 y x.x.x.y:3002

    He instalado el nodo-http-proxy y añadió server.js archivo con los siguientes códigos. Se refiere este enlace

    var http = require('http');
    var httpProxy = require('http-proxy');
    
    var proxy = httpProxy.createProxy();
    var options = {  
      'abc.com': 'http://x.x.x.x:3001',
      'xyz.com': 'http://x.x.x.y:3002'
    }
    
    http.createServer(function(req, res) {
      proxy.web(req, res, {
        target: options[req.headers.host]
      });
    }).listen(80);

    Finalmente, se utiliza siempre para ejecutar todas las 3 aplicaciones de la ejecución del programa de instalación para siempre en el puerto 3001, 3002 y 80.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...