Windows XP Windows 7 Windows 2003 Windows Vista Windows 綜合教學 Linux 系統教學
Windows 10 Windows 8 Windows 2008 Windows NT Windows Server 電腦軟體教學
您现在的位置: Windows教程網 >> Windows教程 >  >> Linux 系統教學 >> Linux 教學

Apache 與 Nginx 核心架構、工作模式與效能深度對比

編輯:Linux 教學

前言

Apache HTTP Server(httpd)與 Nginx 是全球前兩大 Web 伺服器,合併市佔率超過 60%。兩者架構哲學迥異:Apache 採用多進程/多執行緒模塊化,Nginx 採用事件驅動非同步單執行緒。本文從核心組件、生命週期、工作模式(MPM vs Reactor)、請求處理流程、效能特徵五個維度深度剖析。

一、核心架構對比

維度Apache (httpd)Nginx
架構風格模塊化、進程/執行緒池事件驅動、單主進程+多 Worker 進程
核心組件Core + MPM + APR + ModulesCore + Event Loop + Modules (Handler/Filter/Proxy)
可移植層APR (Apache Portable Runtime)自行封裝 OS 介面(極薄)
配置風格指令式、分散式 .htaccess聲明式、集中式 nginx.conf
動態模組載入DSO (LoadModule) 原生支援靜態編譯為主,動態模組較少用

二、Apache 深度剖析

1. MPM(Multi-Processing Module)三大模式

MPM模型適用場景優/缺點
Prefork多進程(單執行緒),預派生子進程池非執行緒安全模組(如舊版 mod_php)、相容性優先穩定、相容好;記憶體佔用大、並發受限
Worker多進程+多執行緒,每進程固定執行緒數高並發、執行緒安全模組記憶體效率高;需確保所有模組執行緒安全
EventWorker 改良,專用 Listener 執行緒處理 Keep-Alive高並發長連線(HTTP/1.1 Keep-Alive、HTTP/2)解決 Worker 阻塞於 Keep-Alive 問題;2.4+ 穩定

2. 請求處理生命週期(11 階段 Hook)

  1. Post-Read-Request:請求讀取後,最早介入點
  2. URI Translation:URL → 檔案系統路徑(mod_alias、mod_rewrite)
  3. Header Parsing:解析請求頭(mod_setenvif)
  4. Access Control:允許/拒絕存取(mod_authz_host)
  5. Authentication:用戶認證(mod_auth_basic、mod_authn_file)
  6. Authorization:權限授權(mod_authz_user)
  7. MIME Type Checking:判斷 Content-Type/Handler(mod_mime)
  8. FixUp:內容生成前最後修飾(最常用 Hook)
  9. Response:核心內容生成(mod_php、mod_proxy_fcgi、靜態檔)
  10. Logging:記錄存取/錯誤日誌
  11. CleanUp:資源釋放、連線關閉

3. PHP 整合方式演進

  • mod_php(Prefork 專用):嵌入 Apache 進程,效能最好但佔記憶體、不支援執行緒安全。
  • mod_proxy_fcgi + PHP-FPM(Event/Worker):Apache 僅代理,PHP-FPM 獨立進程池管理,架構解耦、支援多版本共存。

三、Nginx 深度剖析

1. Master-Worker 進程模型

  • Master 進程:讀取配置、管理 Worker、平滑重載(舊 Worker 自然消亡、新 Worker 接管)。
  • Worker 進程:單執行緒事件循環,處理數萬並發連線,非阻塞 I/O(epoll/kqueue/IOCP)。
  • 快取區:共享記憶體區(Shared Memory Zones)存儲快取、限流、Session 等跨 Worker 數據。

2. 模組分類與處理流程


Client Request
      │
      ▼
+---------------------+
|  Nginx Core         |  → 依 location 匹配選擇 Handler
|  (配置解析、路由)    |
+---------------------+
      │
      ▼
+---------------------+
|  Handler (唯一)     |  → 產生響應內容
|  e.g. ngx_http_static_module, ngx_http_fastcgi_module, ngx_http_proxy_module
+---------------------+
      │
      ▼
+---------------------+
|  Filters (鏈式)     |  → 修改響應(gzip, chunked, SSI, headers)
|  header filter → body filter
+---------------------+
      │
      ▼
Client Response

3. 關鍵模組類型

  • Handler:內容生成器(靜態檔、FastCGI 代理、uWSGI、gRPC、Proxy)。
  • Filter:響應後處理(gzip、headers_more、sub_filter、chunked)。
  • Upstream/Proxy:負載均衡、健康檢查、Session 親和性(upstream 區塊)。

四、效能與並發特徵對比

指標Apache (Event MPM)Nginx說明
靜態檔案吞吐高極高Nginx 零拷貝 + sendfile + 事件模型優勢
動態應用代理高 (mod_proxy_fcgi)高兩者皆為反向代理模式,差異微小
記憶體佔用 (10k 閒置連線)~400-600 MB~10-20 MBNginx 單執行緒事件循環極省記憶體
CPU 密集型處理多核擴展佳需多 Worker 進程擴展Apache 執行緒池天然多核;Nginx 需 worker_processes auto
配置熱重載graceful restart (秒級)極快 (毫秒級)Nginx Master-Worker 設計天然支援
.htaccess 分散式配置支援不支援Apache 適合虛擬主機多租戶;Nginx 需集中管理

五、選型決策矩陣

場景推薦理由
高並發靜態資源/CDN 邊緣節點Nginx記憶體效率、零拷貝、事件模型
PHP 應用(Laravel/Symfony/WordPress)Nginx + PHP-FPM生態標準、配置簡潔、效能最佳
Java/Python/Go 微服務網關Nginx / OpenRestyUpstream 模組、Lua 腳本擴充、gRPC 代理
共享虛擬主機(多用戶 .htaccess)Apache分散式配置、模組豐富、相容性
企業內部舊系統(mod_perl/mod_python/mod_auth_kerb)Apache模組生態、不想重寫認證邏輯
HTTP/2 + TLS 1.3 終結點Nginx / Apache 2.4+兩者均完善支援,Nginx 配置更簡潔

六、總結

Apache 贏在模組生態廣度、分散式配置彈性、執行緒模型多核擴展;Nginx 贏在高並發記憶體效率、事件驅動架構、反向代理/負載均衡原生支援、配置熱重載速度。現代雲原生架構中,Nginx/OpenResty 作為邊緣網關 + 後端微服務、Apache 專注相容性場景,雙棲部署最常見。

Copyright © Windows教程網 All Rights Reserved