首頁  >  文章  >  運維  >  Apache HTTP和Nginx引擎哪個比較好

Apache HTTP和Nginx引擎哪個比較好

王林
王林轉載
2023-05-11 15:49:06903瀏覽

HTTP中間件

當我們在瀏覽器中輸入一個網頁連結後,瀏覽器基於HTTP(s)傳輸協定向對應的伺服器發送請求,伺服器收到對應的請求後經過處理,返回對應的資訊給瀏覽器,然後由瀏覽器解析http中的內容,以網頁的形式表現出來。

伺服器負責接收請求,並在處理之後返回相應的數據,而其中又可以細分為處理http連接的服務部分和執行服務內容的應用部分( WordPress使用PHP產生所需的頁面,就屬於應用程式部分)

而不論應用部分執行的是何種應用,處理http連接的部分幾乎是相同的,所以出現了專門處理http連接的中間件,目前最常見的是ApacheNginx

Apache

正式名稱是“Apache HTTP Server”,是一款開源的HTTP伺服器中間件,誕生於1995年,曾經是HTTP服務領域的龍頭老大,擁有大量的使用者和豐富的社群資源。 Apache的一大優點就是方便與Wordpress等CMS軟體進行集成,只需要簡單的設定就能建立一個基於CMS的網站。

Apache的內部處理模型

內部建構方面,Apache採用多進程的方式,每有一個連接就會為這個連接開闢一個進程,專門用於處理這個連線上的請求,直到連線結束。這樣做的好處是:

  • 來自不同客戶端的連接會立刻得到相應且互不干擾,而且不會因為某一個服務佔用了較長的時間而使其它的連接得不到響應。

但是缺點也是顯而易見的:

  • #當同時存取數比較多的時候,Apache會建立大量的進程,佔用過多的記憶體資源。

  • 大量執行緒間的調度也會造成CPU處理能力的大量浪費。

由此產生了被稱為C10K的難題,C即客戶端(Client),10K是指1萬,即不論伺服器的效能和網絡頻寬有多高,Apache都難以同時處理1萬個以上的連線。

Nginx

讀作Engine-X,就像Apache一樣也是用來HTTP服務的開源中介軟體,誕生於2004年。 NginxApache的歷史要短,但是正因為是後來者,Nginx吸取了Apache的教訓,在設計初期就考慮到了處理大量連線時的效率問題,解決了諸如C10K等隨著網路規模壯大而產生的難題。

Nginx的內部處理模型

Nginx採用了非阻塞IO和非同步訊息驅動的方式,即在稱為worker 的執行緒中使用循環來處理佇列中的連線請求。而根據硬體的情況,可以設定多個worker線程,充分利用CPU的核心資源。

  • 解決了處理大量連線時消耗記憶體過多,調度效率低的問題,同時還能充分的利用所有的CPU核心。在相同硬體下處理並發連線的能力是Apache的10到100倍。

但是Nginx這種方式也不是沒有缺點。

  • 當伺服器單核心效能較差時,基於CMS的動態網站可能需要較長的時間來執行一個請求,此時來自其他客戶端的請求將無法立即執行。當CPU核心數較少,worker執行緒不足時會更明顯。

好在現在伺服器的效能越來越強,在AMD的帶領下CPU核心數也越來越多,Nginx的缺點足以被彌補,而高效的優勢也愈發顯現出來。

綜合對比

Apache Nginx處理能力有限10-100倍是否會被複雜任務阻塞否有可能會設定難度比較簡單相對複雜社區資源豐富相對較少

近年來,Nginx的市場佔有率不斷提高,2019年已經達到了和Apache持平的水平。而對於有極大訪問量的大型網站,可以看到訪問量越大,Nginx的佔比就越高。這也從側面印證了Nginx在處理大量存取時的優越效能。

負載平衡

Nginx除了可以作為HTTP伺服器使用,其強大的反向代理功能還被廣泛地用作負載平衡前端伺服器,逐漸取代了基於硬體的負載平衡器。

Nginx中可以設定若干個後端伺服器,Nginx在收到HTTP請求之後依照一定規則(輪詢,IP哈希,優先隨機)等將請求轉發給後端伺服器,實現負載在多台伺服器上的平均或加權分配。

同時作為負載平衡的前端還能快取後端回傳的數據,緩解後端伺服器的壓力。前端採用Nginx做負載平衡限制每個伺服器的連線數,後端伺服器運行Apache的模式也不少見。

硬體負載平衡器的業界大佬F5 networks在2019年收購了Nginx,推出了包含收費服務的負載平衡解決方案Nginx

以上是Apache HTTP和Nginx引擎哪個比較好的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文轉載於:yisu.com。如有侵權,請聯絡admin@php.cn刪除