Apache 下的三種運行模式
1. CGI 模式(歷史產物)
- 每請求 Fork 一進程:
php-cgi.exe 解析 → 輸出 → 進程退出
- 配置:
Action application/x-httpd-php "/php/php-cgi.exe"
- 缺點:反復加載 php.ini/擴展,性能極差,資源消耗大
2. 模塊模式
- PHP 編譯為
mod_php5.so / php5apache2.dll,隨 Apache 啟動常駐內存
- 配置:
LoadModule php5_module modules/libphp5.so
- 優點:性能最好,無進程切換開銷
- 缺點:PHP 崩潰導致 Apache 崩潰;多線程 MPM(worker/event)下非線程安全
3. FastCGI 模式(推薦生產)
- 架構:Apache +
mod_fastcgi + PHP-FPM 進程管理器
- 流程:Master 管理 Worker 池 → 接收請求 → 分發 Worker → 處理 → 返回
- 優點:
- PHP 崩潰不影響 Web Server,FPM 自動重啟 Worker
- 支持持久連接
- 可運行多 PHP 版本(不同虛擬主機指向不同 php-cgi)
- 缺點:調試時易觸發超時(Zend Studio 等)
Nginx + PHP-FPM:現代高性能標配
Nginx 本身無 PHP 解析能力,必須通過 FastCGI 轉發給 PHP-FPM。
為什麼選 Nginx?
- 輕量、高併發、事件驅動(epoll/kqueue)
- 不綁定特定 FastCGI 實現,可對接 PHP-FPM、spawn-fcgi 等
為什麼選 PHP-FPM 而非 spawn-fcgi?
- PHP-FPM 作為 Patch 編譯進 PHP 核心,性能更優
- 高併發下不會自動重啟 FastCGI 進程(spawn-fcgi 易發生)
- 進程管理功能豐富(動態/靜態/ondemand 三種模式)
IIS + FastCGI / ISAPI
- Windows 開發環境常用,生產較少
- ISAPI 為多線程模式,穩定性不如 FastCGI
三大主流 Stack 對比
| Stack | 特點 | 適用場景 |
| Apache + mod_php | 模塊豐富、兼容性最好、配置簡單 | 中小型項目、需 .htaccess、共享主機 |
| Lighttpd + spawn-fcgi | 輕量、早期高併發首選 | 舊項目維護,新項目不推薦 |
| Nginx + PHP-FPM | 高併發 5-10 倍於 Apache、內存佔用低、靈活 | 現代高流量 Web 應用首選 |
選型建議
- 新項目、高併發、微服務架構 → Nginx + PHP-FPM
- 需 Apache 模塊、.htaccess、共享主機 → Apache + mod_php(或 mpm_event + PHP-FPM)
- Windows 開發機 → IIS + FastCGI 或 Docker 統一環境