2013-08-06 12 views
7

Mam aplikację webową, na której pozwalam ludziom tworzyć podstrony na moim serwerze aplikacji (np: mysite.com/their-site). Chcę, aby mogli wskazać swoją domenę na podstronę mojej aplikacji. Podobnie do sposobu, w jaki przyłączasz domenę do współużytkowanego serwera hostingowego.Nodejs: chcę mapować domeny na serwer

Nie jestem pewien, jak to zrobić. Byłbym wdzięczny, gdyby ktokolwiek mógł mnie oświecić.

+0

Wskazujesz je na różne instancje Node.js? Lub wszystkie te same aplikacje? – Brad

+0

To, o czym wspomniałeś w przykładzie, jest mylące: 'mysite.com/ich-strona' nie znajduje się w oddzielnej domenie, jest to inna trasa. Zazwyczaj masz domenę taką jak "domena.com" i poddomena taką jak "mail.domena.com". Czy chcesz przekierować takie prośby lub je przetworzyć? – user568109

+0

@ user568109 Przepraszamy za zamieszanie. mysite.com/their-site będzie ich stroną w mojej aplikacji. Mogą mieć własną domenę zarejestrowaną gdzie indziej, a ja chciałbym, aby ta opcja była mapowana na ich stronę w mojej witrynie. –

Odpowiedz

5

Jeśli używasz czegoś takiego jak node http-proxy lub nginx, możesz uruchomić każdą z oddzielnych witryn na różnych lokalnych portach, a następnie odwzorować nazwę domeny z powrotem. Używam serwera proxy http, ale inni uwielbiają nginx.

Aby to działało, musisz dodać wpisy DNS rozwiązujące problem z adresem IP, na którym działa odwrotne proxy. Na przykład żądanie portu 80 zostanie zmapowane z powrotem do localhost: 3000.

Pozwala to na uruchamianie każdej aplikacji w izolacji i oddzielnych procesach z innych witryn. Nie mogą się nawzajem załamać. Nie masz również problemów z obszarami nazw, w których obie aplikacje zgłaszają tę samą ścieżkę.

Moi app.js dla proxy HTTP wygląda następująco:

var proxyPort = 80; 
var http = require('http'); 
var httpProxy = require('http-proxy'); 

var options = { 
    router: { 
     'localhost': '127.0.0.1:3000', 
     'somesite.com': '127.0.0.1:3000', 
     'othersite.com': '127.0.0.1:4000' 
    } 
}; 
console.log('Proxy Routing:') 
console.log(options);var options = { 
console.log(); 

var proxyServer = httpProxy.createServer(options); 
proxyServer.listen(proxyPort); 
console.log('Proxy listening on port ' + proxyPort); 

można również trasa ze ścieżkami. Zobacz to: https://github.com/nodejitsu/node-http-proxy/issues/232

Więc raczej oryginalnego wniosku, można to zrobić:

router: { 
    'myhost.com/appA': '127.0.0.1:8080', 
    'myhost.com/appB': '127.0.0.1:9090/appB', 
    'myhost.com/appC': '127.0.0.1:9090/appC' 
    } 
}; 

Inną opcją jest po prostu dostarczyć trasa/strony na klienta, a potem po prostu problem DNS. Użytkownik powinien skonfigurować DNS tak, aby wszystkie nazwy domen spełniały jeden adres IP, na którym działa aplikacja. Że ma pewne wady:

  1. domain1.com/user1, domain1.com/user2, domain2.com/user1 i domain2.com/user2 by wszystkie prace, które prawdopodobnie nie chcą.
  2. Czy kontrolujesz cały kod, czy też dostarczają kod? Jeśli jest to kod dostarczony przez użytkownika, potrzebujesz izolacji, a więc oddzielnych aplikacji.
  3. Nadal najprawdopodobniej będziesz potrzebować serwera proxy http, który będzie działał na porcie 80 w systemie Linux i nie będzie uruchamiany jako sudo.
+0

W moim przypadku myślę, że ustawiam domenę na trasie. Czy coś takiego się uda: "user1domain.com": "127.0.0.1:9090/user1page"? –

+0

Czy jest to preferowana metoda, jeśli planuję mieć ponad 100 domen zamapowanych do tej aplikacji? –

+0

Tak, to powinno działać dobrze. 100+ nie będzie problemem - oczywiście wszystko zależy od obciążenia każdej domeny i zapotrzebowania na zasoby. Co jest dobre, routing oznacza również możliwość skalowania do wielu skrzynek, jeśli zajdzie taka potrzeba. – bryanmac