2013-02-18 77 views
8

我的node.js應用程序我在端口80上聽HTTP,而在https上聽443,我相信這是相當標準的做法。node.js應監聽哪些端口?如何和爲什麼?

然而一些例子我最近已閱讀使用其他端口(例如8080和8081),用於收聽HTTP/HTTPS,然後使用其它手段如iptablesufw規則四百四十三分之八十○通過重新路由分組到服務端口/來自其他人。

查看兩個示例herehere

所以我的問題是爲什麼我不想直接聽港口80和443?

手頭有安全問題嗎?這僅僅是這些作者沒有權限在低於1024的端口上進行偵聽的情況(我會發現這很令人驚訝嗎?)?大多數人是否在邊節點上運行Apache? (我不)。

假設我爲什麼不想直接聽80和/或443,這個方法應該用來將來自80/433的流量轉發到我選擇的其他端口的一個很好的理由?

我已經提到了上面的iptables和ufw,其中一個比其他的更好,還是有其他一些方法我應該使用?答案取決於我是否在流程之間平衡了我的負載?

在此先感謝。

+2

我認爲它因爲你需要root權限運行在低於​​1024的端口,你不想讓你的應用程序有根,但有方法來綁定它stil。我personaly使用[AuthBind](http://en.wikipedia.org/wiki/Authbind) – VeXii 2013-02-18 15:04:41

+1

如果我沒有錯,端口1337正在成爲運行nodejs的標準。要執行應用程序,您可以使用NGINX作爲反向代理服務器。 – 2015-03-16 05:26:04

回答

14

您鏈接的第一篇文章的第一行提到了原因。

Standard practices say no non-root process gets to talk to 
the Internet on a port less than 1024. 

對於節點綁定端口80443,你需要root權限運行它,這不是一個好主意。

用於將流量重新路由到更高端口的方法取決於您。 iptables是資源密集度最低且最簡單的。另一種方法是使用NginX/Apache來代理Node。我想說這種方法的主要好處是,你可以從那裏提供諸如靜態文件之類的東西,而不必通過Node爲它們提供服務。

Apache和NginX都被明確設計爲非常善於服務靜態文件,因此它們非常擅長,而Node是一個完整的JS環境,涉及所有開銷。節點在處理大量的同時連接方面非常出色,並且它可以爲普通負載提供完美的文件服務,但它會比使用NginX更多的資源來完成。

使用HTTP-aware代理(如Apache/NginX)也意味着您可以非常輕鬆地設置多個Node實例,以在同一個域上運行不同的子域或甚至不同的路徑。

+0

使用NginX/Apache來提供文件而不是Node有什麼好處? – Joshua 2013-02-18 15:10:57

+1

@Joshua更新時間 – loganfsmyth 2013-02-18 15:15:03

+0

@loganfsmyth:但是如果你使用Apache或NginX的方法......這意味着,這些服務器需要root權限才能監聽端口80,對吧?那爲什麼不是他們的問題,但是對於node.js來說呢? – Manfred 2015-08-25 09:10:06