2013-08-06 10 views
7

Ich habe eine Webapp, wo ich Menschen erlauben, Unterseiten auf meinem App-Server zu erstellen (zB: mysite.com/their-site). Ich möchte, dass sie ihre Domain auf die Sub-Site meiner App verweisen können. Ähnlich wie Sie eine Domain an einen Shared Hosting Server anhängen.Nodejs: Domänen auf Server abbilden wollen

Ich bin nicht wirklich sicher, wie das geht. Würde es schätzen, wenn mich jemand aufklären könnte.

+0

Zeigen Sie diese auf verschiedene Node.js-Instanzen? Oder die gleiche App? – Brad

+0

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

+0

@ 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. –

Antwort

5

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:

  1. domain1.com/user1, domain1.com/user2, domain2.com/user1 und domain2.com/user2 würde alle arbeiten, die Sie wahrscheinlich nicht wollen.
  2. 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.
  3. 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.
+0

In meinem Fall denke ich, dass ich eine Domain auf eine Route setze. Also würde so etwas funktionieren: 'user1domain.com': '127.0.0.1:9090/user1page'? –

+0

Würde dies auch die bevorzugte Methode sein, wenn ich beabsichtige, 100+ Domains dieser Anwendung zuzuordnen? –

+0

Ja, das sollte gut funktionieren. A 100+ wird kein Problem sein - natürlich hängt alles von der Auslastung der einzelnen Domain- und Ressourcenanforderungen ab. Was schön ist, ist, dass das Routing auch bedeutet, dass Sie bei Bedarf zu mehreren Boxen skalieren können. – bryanmac