博客 / 詳情

返回

cgi、fastcgi、php-cgi、php-fpm異同

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是實現

user avatar
0 位用戶收藏了這個故事!

發佈 評論

Some HTML is okay.