在客戶端上,我可以使用window.location.hostname
獲取主機名。我如何在服務器上獲得相同的結果? 我需要這個工作在Apache代理的後面,不幸的是Meteor.absoluteUrl()
給了我localhost:3000
。我也希望它適用於不同的領域,我想要一個Meteor應用程序,爲不同的領域提供不同的結果。流星:如何獲取主機名,服務器端
這個問題是有點關係:Get hostname of current request in node.js Express
在客戶端上,我可以使用window.location.hostname
獲取主機名。我如何在服務器上獲得相同的結果? 我需要這個工作在Apache代理的後面,不幸的是Meteor.absoluteUrl()
給了我localhost:3000
。我也希望它適用於不同的領域,我想要一個Meteor應用程序,爲不同的領域提供不同的結果。流星:如何獲取主機名,服務器端
這個問題是有點關係:Get hostname of current request in node.js Express
Meteor.absoluteUrl()
給您ROOT_URL
環境變量設置正確。
請參閱以下文檔:http://docs.meteor.com/#meteor_absoluteurl。
流星並不知道它所在的代理服務器的外部地址,並且該代理服務器被訪問的(虛擬)域必須被轉發到Meteor應用程序才能執行你所要做的事情要求。我不認爲這是目前支持。
根據this您可以通過訪問現在進去Meteor.publish()
和Meteor.methods()
呼叫Host
頭:
this.connection.httpHeaders.host
在亞洲其他應用程序,它可能難以確定正被用來連接Host
頭。
'proxy_set_header Host $ host;'在nginx中設置'host'標題。差異託管服務提供商可能以不同的方式進 –
在任何服務器端流星文件,您可以添加:
if (Meteor.isServer) {
Meteor.onConnection(function(result){
var hostname = result.httpHeaders.referer; //This returns http://foo.example.com
});
}
這並沒有解決他的問題,「Meteor.absoluteURL」不起作用。如果'ROOT_URL'設置不正確,請解釋如何正確設置它。 –
這是一個更好的解決方案,因爲它會從'ROOT_URL'給你你的域名。來自其他答案的主機名將是'short form'主機名,例如在Mac Meteors-macbook或AWS上,例如可以由服務器設置的'ip-10-100-12-123'。服務器無法知道自己的外部主機名,除非它進行反向IP查找,在這種情況下,有人可以輕鬆將其劫持到另一個主機名。這個答案是最安全和最有保證的,可以給你正確的主機名。 – Akshat
@NathanielFord此外,在生產環境中,除非提供「ROOT_URL」,否則流星將不會啓動。 – Akshat