2012-04-18 175 views
10

我的最終目標是讓每個服務器實例的node.js更具成本效益。如何爲端口80上的網站製作Node.js多租戶?

我沒有運行遊戲或聊天室,而是爲客戶提供簡單的網站。我想要在一臺服務器上安裝多個客戶端,但有多個網站使用主機頭映射從端口80運行。我想仍然使用express,但是如果可能的話,它更像是從端口80到其他節點應用程序的路由選擇。如果以這種方式完成節點,節點可以更便宜,但是目前它對我的目的來說更加昂貴,因爲如果在端口80上運行,每個客戶都需要它們自己的盒子。另外,我的動機是關注節點開發,但必須有一個理由所以在成本方面。

我在Windows中爲ASP.NET做了相當多的工作,因爲IIS支持這種開箱即用的方式,我知道這對Apache來說也是正常的。

如果這不是正確的問題或提供建設性的批評,而不是隨機的downvote,隨意將此移動到另一個論壇進行堆棧交換。謝謝。

更新

我真是爲使用靜態承載方式(通過gatspy和S3),那麼一個API,而不是通過郵局郵件從服務器的客戶端和API密鑰註冊域名,並定期生成靜態網站隨着網站的變化,但感謝所有的建議!

+1

從你的問題中可以看出你已經知道了基本的答案 - 使用'req.headers.host'來爲不同的虛擬主機在不同的路由鏈路之間做出決定 - 那麼你是否需要一種內置的方式來做到這一點?或者一個圖書館來提取細節? – jimw 2012-04-18 19:00:56

+0

內置將是可取的,節點是偉大的,你可以推出自己的,但我更喜歡一些積極建立在自己的權利 – 2012-04-18 19:05:04

+1

有[這](https://github.com/coolaj86/connect-vhoster),但這不是一個非常活躍的項目。否則[node-http-proxy](https://github.com/nodejitsu/node-http-proxy),它更加活躍,但可能比你需要的要多得多。 – jimw 2012-04-18 19:12:25

回答

25

從理論上講,你可以建立一個純節點網絡服務器來模擬Apache/Lighttpd/Nginx的功能,但我不會推薦它。事實上,對於嚴格的生產服務,我建議始終使用Nginx或同等服務器來提供服務(請參閱thisthis)。

下面是一個簡單的Nginx配置將暴露在口二子服務工作80

worker_processes 4; 

events { 
    worker_connections 1024; 
} 

http { 
    include  mime.types; 
    default_type text/html; 

    server { 
    listen 80; 
    server_name service1.mydomain.com 
    location/{ 
     proxy_pass   http://127.0.0.1:3000/; 
    } 
    } 
    server { 
    listen 80; 
    server_name service2.mydomain.com 
    location/{ 
     proxy_pass   http://127.0.0.1:3001/; 
    } 
    } 
} 

我見過生產箱內核恐慌,因爲節點沒有默認油門負荷,並優先接受新的連接在處理現有的請求 - 已授予,它「不應該」已經崩潰的內核,但它的確如此。另外,通過在端口3000上運行,您可以非常少的權限(非常少的權限)運行您的Node服務(並且仍然對其進行代理以使其顯示在端口80上)。你也可以在多個工作者之間傳播負載,服務靜態,記錄請求,重寫URL等等.Nginx非常快(比Apache輕得多)。同代理代理轉發的開銷很小,爲您帶來如此多的功能和強大的功能,以至於在我的書中這是一個扣籃。即使是微不足道的東西,比如 - 當我崩潰或超載我的節點服務時,用戶會遇到黑洞,或者「赦免我們的灰塵,我們的服務器正在被維護」。

+1

我也看到了這個答案。 http://stackoverflow.com/questions/5009324/node-js-nginx-and-now我會檢查你的,因爲我同意這是我見過的最好的方法。謝謝。 – 2012-05-14 01:35:02

+0

正如一個問題:這不是真正的多租戶,因爲有多個軟件運行,但它是關於有幾個網站在一臺服務器上使用相同的端口? – IroNEDR 2017-04-19 14:00:53

5

如何使用適當的反向代理,如HAProxy,代理監聽端口80,並根據headers.host委託給非公共端口上的多個節點實例(例如10000,10001等)。

+0

是的,這是有道理的 – 2012-04-18 20:37:09

+0

這個問題的主要問題是我不能在HAProxy的這個級別上工作。我正在直接尋找Node.js解決方案,但這確實很有用。我將這個想法放在未來的想法中。 – 2012-04-18 20:46:35

+3

就我個人而言,我不會相信節點唯一的解決方案 - 尤其是因爲您正在談論不同的客戶網站。節點是單線程的 - 意味着網站會很容易干擾其他人的表現和/或在對方死亡時(如果他們都在同一個實例中運行)。你目前如何部署節點? – UpTheCreek 2012-04-18 20:51:27