1. cgi
- 通用網關接口,就是外部應用程序(cgi程序)與web服務器之間的接口標準。
- nginx是內容分發者,如果是請求index.php,根據配置文件內容得知不是靜態文件,就會去找對應的cgi程序進行解析
- cgi就是規定要傳那些數據,以什麼格式傳遞給後方進行處理的協議
- cgi工作模式,一個請求發送過來,啓動cgi解釋器(創建進程)-> 邏輯處理 -> 退出 (fork and exec 模式) 每次都需要重新創建進程,加載配置,浪費系統資源
2. fastcgi
- 快速通用網關接口,常駐型的cgi,不用每次都fork進程,其會使cgi解解釋器進程常駐內存,所以性能較高
- master-worker模型,服務器啓動時載入fastcgi進程管理器
- fastcgi會進行自身初始化,初始化時會創建多個進程
- 請求到達web服務器後,fastcgi進程管理器會選擇並通過socket連接到一個cgi解釋器
3. php-cgi
- php自帶的cgi管理器
- php-cgi的缺點,不能平滑重啓,需要重啓php-cgi才能使php.ini生效
4. php-fpm
- php-fpm是php的一種fastcgi的實現,管理php的fastcgi進程池
- 能夠調度php-cgi程序
- 能夠實現平滑重啓
- php-fpm創建一個master進程,然後創建進程池,監聽socket,fork出多個子進程,子進程各自accept請求,php-fpm的子進程同時只能響應一個請求,處理完一個請求才可以accept下一個請求,多進程,同步阻塞模型
- master和worker進程之間不直接進行通信,master通過共享內存獲取worker進程信息,master進程發送信號通知worker進程
- php-fpm可以同時監聽多個端口,每個端口對應一個worker pool
- worker是cgi程序,php-fpm是fastcgi協議的php是實現