3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
將另一個(gè)Web服務(wù)器置于Node.js前面有幾個(gè)充分的理由:
不必?fù)?dān)心Node.js進(jìn)程的特權(quán)/ setuid。通常只有root可以綁定到端口80。如果讓nginx / Apache擔(dān)心以root用戶身份啟動(dòng),綁定到端口80,然后放棄其root特權(quán),則意味著您的Node應(yīng)用程序不必?fù)?dān)心。
提供靜態(tài)文件,例如圖片,css,js和html。與使用適當(dāng)?shù)撵o態(tài)文件Web服務(wù)器相比,Node的效率可能較低(Node在某些情況下也可能更快,但這不太可能成為常態(tài))。除了可以更高效地提供文件之外,您不必?fù)?dān)心像在Node之外提供服務(wù)時(shí)那樣處理eTag或緩存控件標(biāo)頭。某些框架可能會(huì)為您解決此問(wèn)題,但您需要確定。無(wú)論如何,仍然可能會(huì)更慢。
正如Matt Sergeant在回答中提到的那樣,如果節(jié)點(diǎn)服務(wù)崩潰,您可以更輕松地顯示有意義的錯(cuò)誤頁(yè)面或退回到靜態(tài)站點(diǎn)。否則,用戶可能只會(huì)獲得超時(shí)連接。
在Node前面運(yùn)行另一臺(tái)Web服務(wù)器可能有助于減輕針對(duì)Node的安全漏洞和DoS攻擊。對(duì)于一個(gè)實(shí)際示例,通過(guò)在Node前面運(yùn)行Nginx之類的內(nèi)容來(lái)防止CVE-2013-4450。
我要說(shuō)明第二點(diǎn),說(shuō)您可能應(yīng)該通過(guò)CDN或從類似Varnish的緩存服務(wù)器后面來(lái)提供靜態(tài)文件。如果執(zhí)行此操作,則起源不是Node還是Nginx或Apache都沒有關(guān)系。
請(qǐng)?zhí)貏e注意nginx:如果您使用的是websocket,請(qǐng)確保使用最新版本的nginx(> = 1.3.13),因?yàn)樗鼉H添加了對(duì)升級(jí)升級(jí)以使用websocket的支持。

TA貢獻(xiàn)1818條經(jīng)驗(yàn) 獲得超11個(gè)贊
只是為了給pauljz的答案增加一個(gè)原因,我使用了前端服務(wù)器,這樣當(dāng)我重新啟動(dòng)后端服務(wù)器或由于某種原因崩潰時(shí),它可以提供502個(gè)錯(cuò)誤頁(yè)面。這使您的用戶永遠(yuǎn)不會(huì)收到有關(guān)無(wú)法建立連接的錯(cuò)誤。

TA貢獻(xiàn)1934條經(jīng)驗(yàn) 獲得超2個(gè)贊
我相信,只要您知道自己在做什么,就可以在所有情況下使用Node服務(wù)靜態(tài)文件。使用應(yīng)用服務(wù)器來(lái)服務(wù)于靜態(tài)文件無(wú)疑是一種新的范例,因?yàn)樵S多(每一個(gè)?)競(jìng)爭(zhēng)技術(shù)(PHP,Ruby,Python等)都需要在應(yīng)用服務(wù)器之前使用HTTPD或Nginx之類的Web服務(wù)器。 。
我曾經(jīng)閱讀過(guò)的反對(duì)使用Node服務(wù)靜態(tài)文件的客觀原因都圍繞著使用您最了解的知識(shí)或使用經(jīng)過(guò)更好測(cè)試/更穩(wěn)定的知識(shí)的想法。從實(shí)踐上講,這是非常有效的原因,但幾乎沒有技術(shù)上的相關(guān)性。
除非您發(fā)現(xiàn)經(jīng)典Web服務(wù)器無(wú)法使用Node所具有的功能(我懷疑您會(huì)做到),否則請(qǐng)選擇您最了解的知識(shí)或希望使用的方法,因?yàn)檫@兩種方法都很好。
至于Nginx與Apache的關(guān)系,它們將與Node相同。您應(yīng)該比較它們而不考慮Node。
- 3 回答
- 0 關(guān)注
- 725 瀏覽
添加回答
舉報(bào)