白話 CGI,FastCGI,PHP-CGI,PHP-fpm

Marrigan發表於2020-05-14
  1. 什麼是 CGI?
    是公共閘道器介面協議,一個協議。CGI 就是規定要傳哪些資料,以什麼樣的格式傳遞給後方處理這個請求的協議。

  2. 什麼是 FastCGI?
    FastCGI 像是一個常駐 (long-live) 型的 CGI。和 CGI 一樣的東西,做了下優化,也是一個協議

  3. 什麼是 php-CGI?
    PHP-CGI是PHP自帶的FastCGI程式管理器。

  4. 什麼是 php-fpm?
    第三方 FastCG I的程式管理器,解決 PHP-CGI 的一些問題,並管理 PHP-CGI。

  5. php-fpm 與 fastcgi 什麼關係?
    php-fpm 是針對 php 的,實現了 FastCGI 協議的,並提供了對 php-CGI 管理的一個程式管理器。

  6. php-fpm解決了什麼問題?

    1. php-CGI 的平滑重啟。
    2. php-CGI 的常駐管理。(這裡的常駐是指在 php-CGI 程式被殺死後 php 就掛了,php-fpm 會在php 程式被殺死後重新啟動 php-CGI)
  7. 動靜分離實現?
    php-fpm 獨立執行在非 web 伺服器上,實現所謂的動靜分離。

  8. php 上的 php-cgi 和 php-fpm 都是 php 對 FastCGI 協議的實現。後者還提供了 php-CGI 程式的管理。

  9. 由於FastCGI是多程式,所以比 CGI 多執行緒消耗更多的伺服器記憶體。就是說在你記憶體不大,併發請求不高的情況下,CGI 比 FastCGI 更適合你。

  10. Web Server 一般指Apache、Nginx、IIS、Lighttpd、Tomcat 等伺服器。

  11. Web Application 一般指 PHP、Java、Asp.net等應用程式。

  12. 什麼是 SAPI ?SAPI(Server Application Programming Interface)是應用程式介面。PHP 中最重要的 SAPI 是 PHP-FPM。 PHP-FPM 是對 FastCGI 的實現。

  13. SAPI 通俗的講就是php-CGI,php-cli,mod_php等,php就是php核心。SAPI 的核心就是一個結構體sapi_module_struct。php-CGI,php-cli,mod_php 都實現了該結構體。

  14. php 預設提供了很多種SAPI,常見的提供給 apache 和 nginx 的 php5_module、CGI、FastCGI,給 IIS 的 ISAPI,以及 Shell 的 CLI。

  15. 協議:規則的集合。介面:程式碼中協議的約束。

以上是本人平常通過文章閱讀,Google搜尋,加上自己的一點理解整理。有理解不對或者不準確的地方還望指正。感謝您的閱讀。

本作品採用《CC 協議》,轉載必須註明作者和本文連結

talk is cheap,show me the code!

相關文章