當前位置:編程學習大全網 - 源碼下載 - 03《Nginx 入門教程》Nginx 與 Apache 對比

03《Nginx 入門教程》Nginx 與 Apache 對比

如果說 Nginx 是新生代霸主的話,那麽 Apache 就是當之無愧的老霸主。至少在前幾年 Nginx 在 Web 服務器領域只是占據老二的位置。

但是隨著互聯網的發展,越來越多的人和企業開始轉向 Nginx 的懷抱,從而使得 Nginx 的市場占有率逐年上升,直到牢牢占據第壹的寶座。那麽這壹對新老技術的代表之間,究竟有著怎樣的差別呢?

Nginx 的進程模型前面已經提到過,它是通過 異步的、非阻塞的、事件驅動的方式實現的。 Nginx 的工作進程是多進程的,每個 Worker 進程可以異步處理大量的用戶請求,因此在 高並發下 Nginx 能保持低資源低消耗高性能。

Apache 有壹***有三種穩定的 MPM(Multi-Processing Module,多進程處理模塊)模式 ,其中最常用和默認的是 prefork 模式。prefork 是壹個非線程型的、預派生的 MPM,使用多個進程,每個進程在某個確定的時間只單獨處理壹個連接,效率高,但內存使用比較大。壹個進程相對占用更多的系統資源,消耗更多的內存。

因此,Apache 並不擅長處理高並發請求。 在這種場景下,它會將請求放進隊列中,壹直等到有可用進程,請求才會被處理。因此 Apache 是阻塞型的。當用戶請求過多時,開啟的進程較多,占用內存大,每秒最多的並發連接請求 最多不超過 3000 個,而 Nginx 則可以每秒並發連接超過 10 萬請求。

Nginx 的配置簡潔,且支持正則表達式,使用起來非常方便。在啟動或者熱加載時都會優先檢查配置文件是否存在語法錯誤。Apache 的配置則略顯復雜,而且只有啟動時候才知道配置是否存在問題,如果是重啟出錯則會導致服務中斷,進而影響業務。

根據前面的進程模型對比,我們可以看出: Nginx 是輕量級、支持高並發、海量請求的 web 服務器,而 Apache 是重量級、不支持高並發的 web 服務器

Nginx 在處理靜態文件方面的性能要遠超於Apache,而且支持壓縮、緩存等配置。 Nginx 最擅長的是靜態資源訪問和反向代理。其反向代理模塊也同時支持 4 層協議( 主要是 TCP 協議/ UDP 協議 )和七層協議( HTTP 協議、WebSocket 協議、WSGI 協議 等)的反向代理。同時也可以作為負載均衡服務器,也支持 4 層和 7 層的負載均衡,這些優勢是 Apache 無法比擬的。但是 Apache 在處理動態請求方面有較大優勢,比如 rewrite(對 url 重寫)功能。如果網站使用 rewrite 頻繁的情況下,建議用 Apache。

此外,根據 Nginx 和 Apache 的進程模型,可以看到,Apache 壹個進程對應壹個連接請求,而 Nginx 的壹個 worker 進程可能對應很多個連接請求,這樣如果 Nginx 的壹個進程死掉,會影響比較多的用戶請求, 所以 Apache 相比 Nginx 會更穩定壹些。

Nginx 安裝和啟動都特別容易, 並且幾乎可以做到 7*24 不間斷運行 ,即使運行數個月也不需要重新啟動,支持熱部署,實現不間斷服務的情況下進行軟件版本的升級與版本的回退。而 Apache 在修改配置後,只能手工重啟服務或者使用第三方插件實現熱部署,期間服務會出現短暫的不可用。

Apache 出現時間比較早,仍然是主流的 Web 服務器,擁有豐富的特性,成熟的技術和開發社區,還有數不甚數的第三方插件。 而 Nginx 作為後起之秀,社區同樣非常活躍,版本叠代更新快,各種高性能的第三方模塊層出不窮 。使用 Apache 和 Nginx 中出現的大部分問題都能在社區和網上找到相應的解決方案。

  • 上一篇:除了微軟的就沒有別的操作系統了嗎?
  • 下一篇:如何在 CentOS 7 上安裝 Docker
  • copyright 2024編程學習大全網