2016-02-22 33 views
6

Przez tydzień szukałem w internecie, próbując znaleźć dobre rozwiązanie. Najpierw czytam o http-master, ale mam problemy z jego instalacją. Potem zobaczyłem kilka innych, które nie miały funkcji i łatwości konfiguracji. Lub wszystkie odpowiedzi były nieaktualneWiele stron NodeJS

Chcemy stworzyć stronę internetową w NodeJS, obecnie mamy trzy, dwa dla test/dev i jeden dla produkcji. Każda z nich jest hostowana na tym samym serwerze, obecnie jest to serwer Apache z tą samą nazwą domeny, ale różnymi portami. Mamy inną stronę, nad którą pracujemy, z inną nazwą domeny.

Pytanie brzmi, jaki jest najlepszy sposób wykorzystania NodeJS do obsługi wszystkich witryn i nie tylko? Idąc dalej, chcemy rozwijać wszystkie aplikacje w NodeJS.

Server Specyfikacja: Windows Server 2012 R2 dwa rdzenie 4 GB RAM

+0

Zajmuję się definicjami VirtualHost i dyrektywami mod_proxy w celu przypisania portów, w których działa węzeł, ale w środowisku LAMP. Nie wiesz o systemie Windows ... – Bosworth99

+0

Możliwy duplikat [Jak hostować wiele witryn Node.js na tym samym adresie IP/serwerze w różnych domenach?] (Http://stackoverflow.com/questions/19254583/how-do-i -host-multiple-node-js-sites-on-the-same-ip-server-with-different-domain), który ma już kilka świetnych odpowiedzi na wiele strategii witryny za pomocą Node.js. –

+0

@DigitalSea jest blisko, ale mój serwer aktualnie pracuje pod Windows i Apache. Byłoby miło wykorzystać to, co już mam na miejscu. Przyjęta odpowiedź pokazała przykłady tego, jak to osiągnąć. –

Odpowiedz

7

chcesz użyć odwrotnego proxy. nginx jest dobrym wyborem, ponieważ konfiguracja jest tak prosta. Ale to samo można osiągnąć z apache.

Zasadniczo wystarczy uruchomić każdy aplikacja pod innym portem i oparta na serwerze proxy nazwy domeny zamiast żądań. Oto przykładowa konfiguracja z użyciem 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; 
    } 
} 

Poniższy przykładowy apache powinien działać.

<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

Czy może masz przykład Apache? –

+0

@BrandonWilson dodał przykład używając również Apache. Sprawdź, czy to działa dla Ciebie. –

+0

Świetna robota, udało mi się zrobić to w mojej obecnej instalacji Apache, dziękuję. –

0

Moje preferowany sposób obsługi wielu domen zawsze używać vhost z Express, który pozwala dopasować różne nazwy domen.

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

Jeśli nie chce przejść przez kłopotów z coraz wiele domen wskazujących na ten serwer, uważam, że za pomocą wielu subdomen na jednej podstawowej nazwy (np foo1.bar.com, foo2.bar.com i przy użyciu rekordu CNAME z DNS do punkt do tych subdomen jest bardzo skuteczny.