2016-02-22 15 views
6

Ho cercato su Internet per una settimana ora cercando di trovare una buona soluzione per questo. Per prima cosa ho letto su http-master ma ho riscontrato dei problemi durante l'installazione. Poi ho visto alcuni altri che non avevano le caratteristiche e la facilità di configurazione. O le risposte erano tutte superateNodeJS più siti Web

Vogliamo sviluppare un sito Web in NodeJS, attualmente ne abbiamo tre, due per test/dev e uno per la produzione. Ciascuno di questi è ospitato sullo stesso server, attualmente un server Apache con lo stesso nome di dominio ma diverse porte. Abbiamo un altro sito web su cui stiamo lavorando con un nome di dominio diverso.

La domanda è, qual è il modo migliore per utilizzare NodeJS per servire tutti i siti e altro? Andando avanti vogliamo sviluppare tutte le applicazioni in NodeJS.

Server Spec: di Windows Server 2012 R2 due core 4 GB di RAM

+0

Sto osservando le definizioni VirtualHost e le direttive mod_proxy per assegnare le porte su cui è in esecuzione il nodo, ma che si trova in un ambiente LAMP. Non sono sicuro di Windows ... – Bosworth99

+0

Possibile duplicato di [Come posso ospitare più siti Node.js sullo stesso IP/server con domini diversi?] (Http://stackoverflow.com/questions/19254583/how-do-i -host-multiple-node-js-sites-on-the-same-ip-server-with-different-domain) che ha già ottime risposte per più strategie del sito usando Node.js. –

+0

@DigitalSea è una chiusura, ma il mio server attualmente esegue Windows e Apache. Sarebbe bello usare quello che ho già messo in atto. La risposta accettata ha dimostrato esempi su come realizzarlo. –

risposta

7

si desidera utilizzare un proxy inverso. nginx è una buona scelta, perché la configurazione è così semplice. Ma lo stesso può essere ottenuto anche con Apache.

In pratica basta eseguire ogni applicazione in una porta diversa e basata su proxy del nome di dominio su richieste. Ecco un esempio di installazione utilizzando n ginx.

## Upstream www.example.com ## 
upstream examplelive { 
     server 8081; # nodejs server running on port 8081 
} 

## Upstream dev.example.com ## 
upstream exampledev { 
     server 8082; # nodejs server running on port 8082 
} 

## www.example.com ## 
server { 
    listen  80; 
    server_name www.example.com; 

    access_log /var/log/nginx/log/www.example.access.log main; 
    error_log /var/log/nginx/log/www.example.error.log; 

    ## send request back to examplelive ## 
    location/{ 
    proxy_pass http://examplelive; 
    proxy_set_header  Host   $host; 
    proxy_set_header  X-Real-IP  $remote_addr; 
    proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 


## dev.example.com ## 
server { 
    listen  80; 
    server_name dev.example.com; 

    access_log /var/log/nginx/log/dev.example.com.access.log main; 
    error_log /var/log/nginx/log/dev.example.com.error.log; 

    location/{ 
     proxy_pass http://exampledev; 
     proxy_set_header  Host   static.example.com; 
     proxy_set_header  X-Real-IP  $remote_addr; 
     proxy_set_header  X-Forwarded-For $proxy_add_x_forwarded_for; 
    } 
} 

L'esempio di apache di seguito dovrebbe funzionare.

<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName www.example.com 

    ProxyRequests off 

    <Proxy *> 
      Order deny,allow 
      Allow from all 
    </Proxy> 

    <Location /> 
      ProxyPass http://localhost:8081/ 
      ProxyPassReverse http://localhost:8081/ 
    </Location> 

</VirtualHost> 
<VirtualHost *:80> 
    ServerAdmin [email protected] 
    ServerName dev.example.com  

    ProxyRequests off 

    <Proxy *> 
      Order deny,allow 
      Allow from all 
    </Proxy> 

    <Location /> 
      ProxyPass http://localhost:8082/ 
      ProxyPassReverse http://localhost:8082/ 
    </Location> 

</VirtualHost> 
+0

Hai forse un esempio per Apache? –

+0

@BrandonWilson ha aggiunto l'esempio utilizzando anche Apache. Vedi se va bene per te. –

+0

ottimo lavoro signore, sono riuscito a farlo funzionare nella mia attuale configurazione di Apache, grazie. –

0

mio modo preferito di ospitare più domini è sempre stata quella di utilizzare vhost con Express, che consente di abbinare i nomi di dominio diversi.

var mailapp = connect() 
var staticapp = connect() 

// create main app 
var app = connect() 

// add vhost routing to main app for mail 
app.use(vhost('mail.example.com', mailapp)) 
app.use(vhost('assets-*.example.com', staticapp)) 

Se non si vuole passare attraverso il fastidio di ottenere più domini che puntano a questo server, trovo che l'utilizzo di più sottodomini su un unico nome primario (ad esempio foo1.bar.com, foo2.bar.com e utilizzando un record CNAME con il tuo DNS per punto di tali sottodomini è molto efficace.