Wenn Sie etwas wie node http-proxy oder nginx verwenden, können Sie jede der separaten Sites auf verschiedenen lokalen Ports ausführen und dann den Domänennamen zurückmelden. Ich benutze den http-Proxy, aber andere lieben nginx.
Damit das funktioniert, müssen Sie DNS-Einträge hinzufügen, die zu der IP-Adresse aufgelöst werden, auf der Ihr Reverse-Proxy läuft. Dann wird zum Beispiel die Port 80 Anfrage zurück zu localhost: 3000 gemapped.
Dadurch kann jede App einzeln und in separaten Prozessen von den anderen Standorten ausgeführt werden. Sie können sich nicht gegenseitig abstürzen. Sie haben auch keine Namespace-Probleme, bei denen beide Apps den gleichen Pfad beanspruchen.
Meine app.js für den HTTP-Proxy sieht wie folgt aus:
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);
Sie auch mit Pfaden Route können. Siehe dazu: https://github.com/nodejitsu/node-http-proxy/issues/232
So mehr wie Ihre ursprüngliche Anfrage, die Sie tun können:
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'
}
};
Eine weitere Option ist einfach pro Kunden eine Route/Seite zur Verfügung zu stellen und dann einfach, es ist ein DNS-Problem. Sie würden DNS so einrichten, dass alle Domänennamen in die eine IP-Adresse aufgelöst werden, auf der Ihre App ausgeführt wird. Das hat einige Nachteile:
- domain1.com/user1, domain1.com/user2, domain2.com/user1 und domain2.com/user2 würde alle arbeiten, die Sie wahrscheinlich nicht wollen.
- Steuern Sie den gesamten Code oder liefern sie Code? Wenn es Code ist, der vom Benutzer bereitgestellt wird, möchten Sie eine gewisse Isolation, also separate Apps.
- Sie benötigen wahrscheinlich immer noch einen HTTP-Proxy, der auf Port 80 in Linux ausgeführt wird und nicht als sudo ausgeführt wird.
Zeigen Sie diese auf verschiedene Node.js-Instanzen? Oder die gleiche App? – Brad
Was Sie im Beispiel erwähnen, ist verwirrend: 'mysite.com/ihre-Site' wäre nicht auf einer separaten Domain, es ist eine andere Route. Normalerweise haben Sie Domain wie 'domain.com' und Subdomain wie' mail.domain.com'. Möchten Sie solche Anfragen umleiten oder bearbeiten? – user568109
@ user568109 Sorry für die Verwirrung. mysite.com/their-site wäre ihre Seite in meiner Bewerbung. Sie haben vielleicht eine eigene Domain, die woanders registriert ist, und ich möchte, dass sie die Möglichkeit haben, auf ihrer Seite auf meiner Seite zu mappen. –