2014-06-18 12 views
16

Auf dem Client kann ich window.location.hostname verwenden, um den Hostnamen zu erhalten. Wie kann ich das gleiche auf dem Server bekommen? Ich brauche dies, um hinter einem Apache-Proxy zu arbeiten, leider Meteor.absoluteUrl() gibt mir localhost:3000. Ich möchte auch, dass es für verschiedene Domains funktioniert, ich möchte eine Meteor-App, die für verschiedene Domains unterschiedliche Ergebnisse liefert.Meteor: Wie bekomme ich den Hostnamen, Serverseite

Diese Frage ist etwas im Zusammenhang: Get hostname of current request in node.js Express

Antwort

29

Meteor.absoluteUrl() gegeben, dass Ihre ROOT_URL env Variable richtig eingestellt ist.

Siehe die folgenden Dokumente: http://docs.meteor.com/#meteor_absoluteurl.

Meteor kennt die nach außen gerichtete Adresse des Proxy, hinter dem sie sich befindet, nicht und die (virtuelle) Domäne, auf die dieser Proxy zugreift, müsste an die Meteor-App weitergeleitet werden, damit sie das tut, was Sie sind Bitte um. Ich denke nicht, dass dies derzeit unterstützt wird.

+0

Dies spricht nicht sein Problem von "Meteor.absoluteURL" funktioniert nicht. Wenn 'ROOT_URL' nicht richtig eingestellt ist, erklären Sie bitte, wie Sie es richtig einstellen. –

+1

Dies ist eine bessere Lösung, da es Ihnen den Namen Ihrer Domain von 'ROOT_URL' gibt. Der Hostname von der anderen Antwort wäre der Hostname "Kurzform", z. B. auf einem Mac "Meteors-Macbook" oder auf AWS etwas wie "ip-10-100-12-123", wie vom Server eingestellt werden kann. Ein Server kann seinen eigenen externen Hostnamen nicht kennen, es sei denn, er führt eine umgekehrte IP-Suche durch, und in diesem Fall kann jemand ihn leicht zu einem anderen Hostnamen entführen. Diese Antwort ist die sicherste und garantiert den richtigen Hostnamen. – Akshat

+0

@NathanielFord zusätzlich in Produktionsumgebungen Meteor wird nicht gestartet, wenn 'ROOT_URL' bereitgestellt wird. – Akshat

6

Wenn Sie den Hostnamen des Servers möchten, wie in /etc/hostname beispielsweise konfiguriert:

Mit meteorite:

$ mrt add npm

In Ihrem Server Code:

os = Npm.require('os') 
hostname = os.hostname() 

Dies hat keine Verbindung zum Host-Header in der eingehenden Anfrage.

aktualisiert Antwort mit einigen chmac Worte aus dem Kommentar unten

+0

Das ist die richtige Antwort :) –

+0

Ich bezweifle es den gleichen Host-Namen zurückgibt, wie in Browser ... –

+0

Warum? Können Sie ein Beispiel geben und idealerweise eine bessere Antwort? :) – guaka

9

Nach this können Sie jetzt bekommen die Host Header innerhalb Meteor.publish() und Meteor.methods() Anrufe durch den Zugriff auf:

this.connection.httpHeaders.host 

An anderer Stelle in der Anwendung, ist es wahrscheinlich schwierig, die Host Header zu bestimmen, die verwendet wird, um zu verbinden.

+1

'proxy_set_header Host $ host;' in nginx wird der Header 'host' gesetzt. Diff-Hosting-Anbieter können dies anders festlegen. –

1

In jeder serverseitige Meteor-Datei können Sie hinzufügen:

if (Meteor.isServer) { 

    Meteor.onConnection(function(result){ 
    var hostname = result.httpHeaders.referer; //This returns http://foo.example.com 
    }); 
} 
Verwandte Themen