首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

HTTP 伺服器支援 PHP 的三種架構模式深度解析

     編輯:PHP 相關知識

前言

Web 伺服器如何執行 PHP 腳本?歷經 CGI、模組模式、FastCGI 三代演進。理解這三種架構差異,有助於選擇適合專案的部署方案(Apache + mod_php、Nginx + PHP-FPM 等)。

模式一:內建模組模式

代表:Apache + mod_php (mod_php5)

  • PHP 解譯器編譯為 Apache 模組,常駐於 Apache 進程記憶體中
  • 請求到達時,直接在同一進程內執行 PHP,無需進程間通訊
  • 優點:設定簡單、效能穩定、相容性好
  • 缺點:Apache 進程體積大(每個 worker 都載入 PHP)、記憶體佔用高、難以獨立升級 PHP、非執行緒安全(需用 prefork MPM)

模式二:CGI 模式

Common Gateway Interface

  • 每個請求啟動一個新的 PHP CGI 進程,執行完畢後結束
  • 缺點:效能極差(重複 fork/exec 開銷大)、安全性較低、幾乎已被淘汰

模式三:FastCGI 模式

FastCGI = CGI 改良版,採用 C/S 架構

  • PHP 解譯器以常駐 Daemon 進程池形式運行(如 php-fpm master + 多個 worker)
  • Web Server(Nginx/Lighttpd)透過 Socket(TCP/Unix)轉發請求給 FastCGI 進程
  • 處理完畢回傳結果(通常為 HTML),連線可重用
  • 優點:
    • Web Server 與 PHP 解譯器完全分離,各司其職
    • Nginx/Lighttpd 輕量高併發,專注靜態資源與反向代理
    • PHP 進程池可獨立管理、平滑重啟、限制資源
    • 效能可達 Apache + mod_php 的 5~10 倍(高併發場景)
  • 缺點:高流量下 Daemon 可能過載、記憶體洩漏導致重啟(早期 spawn-fcgi 問題)

主流 FastCGI 實作組合

組合特點
Lighttpd + spawn-fcgi早期方案,spawn-fcgi 隨 Lighttpd 內建,高併發下曾出現記憶體洩漏、自動重啟問題
Nginx + PHP-FPM (推薦)PHP-FPM 為 PHP 官方維護的 FastCGI 進程管理器,編譯進 PHP 核心,高併發穩定、功能豐富(平滑重啟、慢日誌、狀態頁)
Nginx + spawn-fcgi需額外安裝 Lighttpd 取得 spawn-fcgi,配置繁瑣,已漸少使用

為何 PHP-FPM 取代 spawn-fcgi?

  • 作為 PHP Patch 開發,編譯進核心,效能更優
  • 進程管理演算法更先進,高併發不易崩潰
  • 支援動態/靜態/按需進程模式、慢請求日誌、狀態監控

總結:三大主流 Stack 對比

  1. Apache + mod_php:傳統、簡單、適合中小型、相容 .htaccess
  2. Lighttpd + spawn-fcgi:輕量但穩定性較弱,逐漸邊緣化
  3. Nginx + PHP-FPM:現代高併發標準配置,效能最佳、架構清晰、運維友善

選型建議

  • 新專案、高併發、微服務架構 → Nginx + PHP-FPM
  • 舊專案遷移、需 .htaccess、共享主機環境 → Apache + mod_php
  • 嵌入式、極度資源受限 → Lighttpd(但建議改用 Nginx)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved