PHP CGI FastCGI php-fpm 解惑

來源:互聯網
上載者:User
web伺服器接受到瀏覽器的請求時,如果是靜態資源就直接將其返回給瀏覽器;如果是動態資源,就需要CGI ,cgi可以理解為一種協議or一類處理常式,可以執行 php or python 指令碼。

web伺服器exec這樣一個進程,然後交給他一些輸入參數,他就慢慢的處理完後把結果返回給web伺服器,那從協議層面來說cgi協議就是規範了web伺服器和cgi程式的一些輸入輸出參數的含義。

CGI(Common Gateway Interface)是1993年由美國國家超級電腦應用中心(NCSA)為 NCSA HTTPd Web 服務器開發的。這個 Web 服務器使用了 UNIX shell 環境變數 來儲存從 Web 服務器傳遞出去的參數,然後產生一個運行 CGI 的獨立進程。CGI的第一個實現是 Perl 寫的,但是 CGI 有如下問題:

  • 效率低下:每一個串連 fork 一個進程處理。
  • 功能十分有限:CGI只能收到一個請求,輸出一個響應。

所以就有了Apache的mod_php,FastCGI(Fast Common Gateway Interface)

FastCGI使用進程/線程池來處理一連串的請求。這些進程/線程由FastCGI伺服器管理,而不是Web伺服器。 當進來一個請求時,Web伺服器把環境變數和這個頁面請求通過一個Socket長串連傳遞給FastCGI進程。所以FastCGI有如下的優點:

  • 效能:通過進程/線程池規避了CGI開闢新的進程的開銷。
  • 相容:非常容易改造現有CGI標準的程式。
  • 語言無關:FastCGI是一套標準,理論上講只要能進行標準輸出(stdout)的語言都可以作為FastCGI標準的Web後端。

  • Web Server隔離:FastCGI後端和Web Server運行在不同的進程中,後端的任何故障不會導致Web Server掛掉。
  • 專利:沒有Apache mod_php之類的私人API的智慧財產權問題。
  • 擴充:FastCGI後端和Web Server通過Socket進行通訊,兩者可以分布式部署並方便進行橫向擴充。
  • 5.phpfpm是php對fastcgi的一種具體實現,它的啟動後會建立多個cgi子進程,然後主進程負責管理子進程,同時它對外提供一個socket,那web伺服器當要轉寄一個動態請求時只需要按照fastcgi協議要求的格式將資料發往這個socket的就可以了,那phpfpm建立的子進程去爭搶這個socket串連,誰搶到了誰處理並將結果返回給web伺服器,那phpfpm主進程幹什麼了?比方說其中一個子進程異常退出了怎麼辦,那phpfpm會去監控他一旦發現一個cgi子進程就會又啟動一個,還有其他諸多管理功能

    6 phpfpm作為一個獨立的進程存在 通過socket與nginx建立串連,而mod_php 是作為一個模組被載入進了apache伺服器,同時他們兩作為cgi調度管理器,他們對其管理的方式也不一樣

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.