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:
- domain1.com/user1, domain1.com/user2, domain2.com/user1 i domain2.com/user2 by wszystkie prace, które prawdopodobnie nie chcą.
- 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.
- 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.
Wskazujesz je na różne instancje Node.js? Lub wszystkie te same aplikacje? – Brad
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
@ 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. –