簡體   English   中英

為什么我們需要在Node.js表達web框架下使用apache?

[英]Why do we need apache under Node.js express web framework?

我將部署我的node.js應用程序。

我只能使用純粹的node.js啟動自己的Web應用程序。

但我的fd告訴我,最好在apache或nginx下提供這個web應用程序。

任何人都有這樣的經驗,為什么我們需要apache,因為我可以在node.js + express上啟動我的網絡應用程序?

我想了解有關部署知識的更多信息。 謝謝你的幫助。

套件

將Apache置於Node之前在greenfield應用程序中並不常見。 我可以批准的唯一情況是,如果您的公司在前端對基於Apache的基礎架構(監控/安全/路由/緩存等等)進行了現有投資,並且系統管理員堅持這種設置。

有些人喜歡在前面放置nginx或haproxy來管理路由規則,因此他們可以將靜態文件(資產)的請求從Node.js傳遞出來(在處理靜態文件時,node.js並不總是高效),或者花哨的負載平衡或故障轉移。 在0.2.x等早期......甚至Ryan Dahl主張在Node.js面前運行一些主要用於安全的東西; 雖然,我認為沒有發現任何重大問題。 我個人在Node.js面前運行nginx,因為我們有幾個站點和服務點擊了前端共享IP,我們代理回到不同內部端口上監聽的各個節點實例。

Nginx比Apache更適合,因為它是輕量級和單線程的,而不是每個請求的Apache線程(在大多數常規設置中)。 但是現在甚至還有一個可靠的(node-http-proxy排除)基於Node.JS的前端代理http://www.github.com/substack/bouncy ,其中一個名人node.js開發人員使用/將用於前端PaaS的。

首先,是的,使用nginx而不是Apache - 配置nginx要容易得多,而且它更輕,更高效。

預先使用nginx代理,您將獲得以下幾個優勢:

  • 能夠為您網站的不同部分運行多個后端
  • 更快的靜態文件服務器
  • 如果你需要關閉你的節點服務器,清理重啟(nginx可以提供漂亮的“維護不足”頁面)
  • 登錄您的節點應用程序可以專注於調試,nginx可以記錄請求 - 保持它的美觀和干凈

可能還有其他我錯過的東西。

nginx可以做的一件非常好的事情是“try_files”指令,它將首先查找本地文件,如果找不到它們,它將傳遞給Node后端。

你不想使用Apache,因為Nginx更適合,因為Nginx是為異步I / O而構建的。 您希望將Nginx用作轉發代理服務,將客戶端指向實際的node.js Web服務器。 這允許在應用程序增長時進行水平擴展以處理增加的負載。 因此,如果您的第一個Nginx服務器已經超出了它,那么您可以安裝另一個Nginx服務器......您還可以對Node.js Web服務器執行相同的操作。

客戶端Web瀏覽器< - > Nginx < - > Express app.js

如果您從nginx提供服務,然后使用Express作為動態內容,您還可以更快地提供靜態內容。 對於部署,您可能希望編寫一個sh腳本來像正常一樣復制和運行Express服務器並像正常一樣運行您的Nginx服務器,但使用轉發代理設置。 你可以在Nginx中使用這樣的腳本:

upstream your_domain_app {
    server 127.0.0.1:8000;
}

server {
    listen 0.0.0.0:80;
    server_name your_domain.com your_domain;
    access_log /var/log/nginx/your_domain.log;

    location / {
      proxy_set_header X-Real-IP $remote_addr;
      proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
      proxy_set_header Host $http_host;
      proxy_set_header X-NginX-Proxy true;

      proxy_pass http://your_domain_app/;
      proxy_redirect off;
    }
 }

使用像apache這樣的網絡服務器或在大多數情況下使用nginx的原因是:

  1. 負載平衡 - 在應用程序/ Web服務器前使用Web服務器進行負載平衡是非常常見的做法
  2. 緩存 - 與nodejs或其他此類應用程序服務器相比,像nginx這樣的Webserver提供了廣泛的緩存功能
  3. 請求處理 - 像nginx這樣的純網絡服務器在處理多個請求方面(即高並發性)方面要優越得多。

像nginx這樣的網絡服務器的緩存和高級請求處理功能使它們成為在nodejs之前用作代理服務器的一個殺手選擇,從而減輕了它們的負載。

由於上述原因,使用web服務器提供靜態文件也很常見,而不是nodejs。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM