[英]Why do some applications need to use other web servers like Apache while node or express doesnt?
[英]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可以做的一件非常好的事情是“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;
}
}
像nginx這樣的網絡服務器的緩存和高級請求處理功能使它們成為在nodejs之前用作代理服務器的一個殺手選擇,從而減輕了它們的負載。
由於上述原因,使用web服務器提供靜態文件也很常見,而不是nodejs。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.