Ospitare più siti web utilizzando Node.js Express

Sto avendo problemi di configurazione di due diversi Node.js applicazioni con domini diversi. Sono due directory

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

e

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

Ho bisogno di admin.abc.com al punto di esprimere-installazione di amministrazione e abc.com per l’installazione di express. Ho vhost installato e il sito è in ascolto sulla porta 80.

Hanno aggiunto

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

I miei problemi:

  • per sempre è installato, ogni volta che inizio a entrambe le applicazioni, la seconda è sempre fermato. Ho provato con porta diversa per entrambe le applicazioni ma continua ad avere lo stesso errore. Individualmente sono in esecuzione senza problemi.
  • Penso che la mia configurazione è troppo complicato per la spedizione di dominio. Eventuali suggerimenti migliori? Può essere che ho un master app.js file che posso utilizzare per indirizzare i domini nelle rispettive applicazioni senza utilizzare il app.js di ciascuna delle applicazioni.
Sei ancora l’hosting di applicazioni sulla stessa porta, utilizzando la stessa interfaccia di rete. Così, quando la seconda applicazione si avvia, si troverà sempre la porta in uso. Non si dovrebbe utilizzare una porta diversa per ospitare, anche quando si utilizza vhost? Vedere questo esempio per i dettagli. Forse è meglio utilizzando nodo-http-proxy, per mantenere l’app totalmente indipendente? Vedere questo post per un confronto.
Grazie @veggiesaurus nodo-http-proxy dovrebbe essere la strada da percorrere. Ti consente di sapere come va.
Si prega di fare. Ho aggiunto una risposta alla domanda con un po ‘ più in dettaglio, nel caso di chiunque altro si è imbattuto in questa domanda.
Si prega di considerare Nginx – una buona soluzione per l’avvio di più nodi server all’interno di un singolo server: stackoverflow.com/questions/5009324/node-js-nginx-what-now

OriginaleL’autore Pradino | 2015-07-22

3 Replies
  1. 7

    Non sono sicuro di come si utilizza il vhost. Prima di tutto con vhost approccio, è necessario eseguire uno solo esprimere app. Non due. Qui è un esempio.

    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');
    }

    Hai solo bisogno di eseguire il principale express app con vhost attivato utilizzando per sempre.

    ci potrebbero essere problemi di prestazioni o altri problemi, se questo stesso setup, sono stati utilizzati per eseguire un numero più grande (diciamo 20) di esprimere le app? E, supponiamo che il 19 di questi sono molto leggeri (express rendering semplice Giada modelli) – ma il 20 è un po ‘più complesso e richiede un po’ di più la CPU. Se ho 10 utenti attivi su ciascuno dei 20 siti, il 10, che sono la visualizzazione di più complicato di una causa rallentamenti per gli spettatori delle altre 19?
    Il problema con il vhost è che tutti questi diverso applicazioni sono in esecuzione nello stesso spazio dell’utente. Che probabilmente c’è un bisogno per la loro esecuzione in spazi separati (come suexec in apache), in modo che se un sito di ottenere hacked/si blocca, non è in grado di infettare gli altri. Potrebbe non importa molto in questo esempio però. Guarda pm2: pm2.keymetrics.io/docs/utilizzo/avvio/#utente-permessi

    OriginaleL’autore dreamingblackcat

  2. 6

    Si ospitano le applicazioni sulla stessa porta, utilizzando la stessa interfaccia di rete. Così, quando la seconda applicazione si avvia, si troverà sempre la porta in uso. Se si desidera utilizzare più applicazioni sulla stessa porta, ciascuna di esse il bisogno di avere una propria interfaccia di rete. Quando si utilizza vhost, si sarebbe ancora bisogno di essere in ascolto su una porta diversa per ogni app. Vedere questo esempio per i dettagli. Se desideri che la tua app, per essere completamente indipendente, è meglio utilizzando nodo-http-proxy. Questo consente di ospitare un proxy sulla porta 80, che inoltra le richieste per esprimere applicazioni in ascolto su porte diverse. Se una di queste applicazioni si blocca, non un crash dell’app, a differenza del vhosts approccio. Questo post dà un esempio di applicazione utilizzando il nodo-http-proxy.

    OriginaleL’autore veggiesaurus

  3. 6

    Grazie @veggiesaurus per il puntamento fino a nodo-http-proxy. Le scuse per l’invio in ritardo.

    Ecco come ho risolto il mio problema con nodo-http-proxy

    Struttura Di Cartelle:

    • www/
      • server.js
      • abc/[express setup]
        • app.js
      • xyz/[express-installazione di amministrazione]
        • node_modules/express-admin/app.js

    “abc” e “xyz” sono proprio setup e in esecuzione sulla porta x.x.x.x:3001 e x.x.x.y:3002

    Ho installato il nodo-http-proxy e ha aggiunto server.js file con i seguenti codici. Di cui questo link

    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);

    Infine, utilizzato sempre di eseguire tutte e 3 le applicazioni per eseguire l’installazione per sempre in porta 3001, 3002 e 80.

    OriginaleL’autore Pradino

Lascia un commento