2014-12-18 65 views
0

這必定是一個非常普遍的問題。我已經看到了各種各樣的答案,但似乎沒有爲我工作。在Azure上將節點指向節點快速服務器

我在Windows Azure上的apache服務器上安裝了節點。我開發的應用,並準備去(下面摘錄):

var express = require("express"); 
var app = express(); 

//example api call 
app.get("/api/example", function(req, res){ 

    //do some process 
    res.send(data); 

}); 

app.listen(8080); 
console.log("App listening on port 8080"); 

現在,我自己的電腦上進行測試的時候,然後我可以去localhost:8080,它的偉大工程。但是現在我已經把它放在Azure服務器上了,我無法讓外部域名正確指向它。因此,例如,我有域:

framework.example.com 

我已經添加到了我的hosts文件在Azure中:

XXX.0.0.01 framework.example.com 

起初我也試過編輯http-vhosts.conf指向域到正確的目錄。這用於加載前端,但應用程序無法與後端進行通信。 API調用返回400找不到錯誤。

我也試過Express vhost方法,但認爲我做錯了,並沒有完全理解它。什麼是正確的方法?!

我的應用程序的結構是這樣的:

- package.json 
- server.js 
- server 
    - files used by server.js 
- public 
    - all frontend files 

所以要引導它運行在上面的代碼我跑server.js服務器。 server.js使用下面的Express配置指向公用文件夾。

app.use(express.static(__dirname + "/public")); 

回答

0

將它添加到Azure中的hosts文件中將無濟於事。您需要將域的DNS配置爲指向Azure。我建議使用您的Cloud Service實例的DNS名稱。如果您出於某種原因需要停止基礎虛擬機IP地址,則您的基礎虛擬機IP地址可能會更改,但您的Cloud Service DNS名稱已配置爲始終路由到基礎虛擬機。這意味着您需要使用DNS設置CNAME。

瞭解更多關於在這裏:​​Cloud Services Custom Domain Name

接下來,你要麼需要主機端口80上的節點的應用程序,或者把一個代理在它的前面來處理你​​。否則,你會被卡在輸入framework.example.com:8080,這是不理想的。在Linux上,您可能需要成爲特權用戶才能在端口80上託管,但您絕不希望節點應用具有root權限。您可以使用authbind來解決此問題。

查看如何與節點這裏使用它的一個例子:Using authbind with Node.js

之所以這麼說,好像你的Linux服務器管理有點新。如果是這樣的話,我強烈建議嘗試使用諸如Azure Websites而不是VM。您不再需要管理虛擬機操作系統。您只需告訴它來託管您的應用程序,並將其餘部分處理。如果您使用的是github,那麼測試和迭代非常容易。它確實在Windows下託管,這可能會對某些應用程序造成問題,但我將所有節點站點(在Mac上開發)無任何問題。

+0

感謝您的回答。我已經爲該域配置了DNS。就像我在我的問題中所說的,我可以加載前端,但我沒有正確地進行路由,所以後端API可以工作。是的,我對使用Azure相當陌生,但出於各種其他原因必須使用VM。我會看看你發佈的鏈接。 – Coop

+0

我在你的問題中沒有看到有關DNS的任何信息。 hosts文件只會更新你的服務器處理請求的方式。如果您的API請求是從瀏覽器運行的,它將無濟於事。你能提供更多關於你想要做什麼的細節,哪些不起作用?後端是什麼?它如何被稱爲?你在哪裏看到400錯誤? –

+0

我說在編輯http-vhosts.conf文件之後,加載了前端。如果DNS沒有正確配置,這將是不可能的。我用後臺的示例API調用更新了我的問題。 – Coop