CGI、FastCGI 和 PHP_FPM到底有什麼關係?
阿新 • • 發佈:2019-02-14
最近在使用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 協議的介面程式,額外還提供了相對智慧一些任務管理。