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

PHP 在主流 Web 服務器上的運行模式全景解析:從 CGI 到 PHP-FPM 的演進之路

     編輯:PHP 綜合知識

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 應用首選

選型建議

  1. 新項目、高併發、微服務架構 → Nginx + PHP-FPM
  2. 需 Apache 模塊、.htaccess、共享主機 → Apache + mod_php(或 mpm_event + PHP-FPM)
  3. Windows 開發機 → IIS + FastCGI 或 Docker 統一環境
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved