1. 程式人生 > >CGI、FastCGI 和 PHP_FPM到底有什麼關係?

CGI、FastCGI 和 PHP_FPM到底有什麼關係?

最近在使用vagrant搭建php的開發環境。
其中在搭建除錯過程中,發現了很多問題(畢竟之前一直在用整合開發環境,一鍵安裝搞定。。)。
進而調查了下CGI FastCGI 與 PHP-FPM 現總結如下:

一次請求過程概括

當你使用瀏覽器訪問了index.php,到底經歷了什麼呢?

這裡寫圖片描述

看完這張圖是不是有點清晰了?下面具體講解下。

當你輸入url地址訪問index.php時,你的瀏覽器(客戶端)會發送請求到你的伺服器(nginx,apache等),但是伺服器只能處理html等靜態資源,像php,jsp這些動態資源伺服器是無法處理的,所以需要特定的解析器去處理,那麼伺服器與解析器是怎麼通訊(聯絡)的呢?就用到了CGI,它們通過CGI去通訊,通訊之後就需要使用PHP-FPM去解析php檔案了,解析完成之後,返回給伺服器,伺服器再返回給瀏覽器(客戶端),這樣一次請求過程就結束了。

所以:

  • CGI 是 Web Server 與 Web Application 之間資料交換的一種協議。
  • FastCGI:同 CGI,是一種通訊協議,但比 CGI 在效率上做了一些優化。
  • PHP-CGI:是 PHP (Web Application)對 Web Server 提供的 CGI 協議的介面程式。
  • PHP-FPM:是 PHP(Web Application)對 Web Server 提供的 FastCGI 協議的介面程式,額外還提供了相對智慧一些任務管理。