3 回答

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

TA貢獻1818條經驗 獲得超11個贊
只是為了給pauljz的答案增加一個原因,我使用了前端服務器,這樣當我重新啟動后端服務器或由于某種原因崩潰時,它可以提供502個錯誤頁面。這使您的用戶永遠不會收到有關無法建立連接的錯誤。

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