CGI FastCGI和php fpm的概念和區別

2021-10-03 08:25:43 字數 2831 閱讀 9037

1.使用者通過http協議發起請求,請求會先抵達lnmp架構中的nginx

2.nginx會根據使用者的請求進行判斷,這個判斷是由location完成的

3.判斷使用者請求的是靜態頁面,nginx直接進行處理

4.判斷使用者的請求是動態頁面,nginx會將該請求交給fastcgi協議下發

7.如果有查詢資料庫的操作,則由php連線資料庫(使用者 密碼 ip )然後發起查詢的操作

8.最終資料由 mysqi -> php -> php-fpm -> fastcgi ->nginx -> http -> user

cgi ( common gateway inte***ce ),即通用閘道器介面,是www技術中最重要的技術之一,是外部應用程式(即cgi程式)與web伺服器之間的介面標準,負責在cgi程式和web伺服器之間傳遞資訊

cgi是web伺服器執行時,呼叫外部應用程式(即cgi程式)的規範,cgi規範允許web伺服器執行外部程式,並將它們的輸出傳送給web瀏覽器

cgi程式的工作方式

web伺服器一般只處理靜態檔案請求(如 jpg、htm、html),如果碰到乙個動態指令碼請求(如php),web伺服器主程序,就fork出乙個新的程序來啟動cgi程式,也就是說將動態指令碼請求交給cgi程式來處理。啟動cgi程式需要乙個過程,比如,讀取配置檔案,載入擴充套件等。cgi程式啟動後,就會解析動態指令碼,然後將結果返回給web伺服器,最後web伺服器再將結果返回給客戶端,剛才fork的程序也會隨之關閉。

這樣,每次使用者請求動態指令碼,web伺服器都要重新fork乙個新程序,去啟動cgi程式,由cgi程式來處理動態指令碼,處理完後程序隨之關閉。

這種工作方式的效率是非常低下的。

cgi是怎麼執行動態請求的

web伺服器接受到請求,然後根據內容,fork乙個新程序,這個程序會把處理完的資料返回給web伺服器,最後web伺服器把內容傳送給使用者,剛才fork的程序也隨之退出,如果下次使用者還請求改動態指令碼,那麼web伺服器又再次fork乙個新程序。這個方式的問題在與每次請求都要新開乙個程序,用完之後又要關閉,這是cgi最為人詬病的fork-and-execute 模式,效率上比較低

後來出現了一種更高階的方式,web伺服器收到乙個請求時,他不會重新fork乙個程序(因為這個程序在web伺服器啟動時就開啟了,而且不會退出),web伺服器直接把內容傳遞給這個程序,這個程序收到請求後進行處理,把結果返回給web伺服器,最後自己接著等待下乙個請求的到來,而不是退出。 這就是fastcgi。效率上比cgi高很多

fastcgi就像是乙個常駐(long-live)型的cgi程式,它可以一直執行著。fastcgi程式也可以和web伺服器分別部署在不同的主機上,它還可以接受來自其他web伺服器的請求。

fastcgi也是語言無關的。其主要行為是將cgi直譯器程序保持在記憶體中並因此獲得高效的效能。眾所周知,cgi直譯器的反覆載入是cgi效能低下的主要原因。

fastcgi是一種程序管理工具,它可以在記憶體中管理cgi程序。

fastcgi程序管理器需要單獨啟動。啟動fastcgi後,會生成乙個fastcgi主程序和多個子程序(子程序其實就是cgi直譯器程序)。

當客戶端請求web伺服器上的動態指令碼時,web伺服器會將動態指令碼通過tcp協議交給fastcgi主程序,fastcgi主程序根據情況,安排乙個空閒的子程序來解析動態指令碼,處理完成後將結果返回給web伺服器,web伺服器再將結果返回給客戶端。該客戶端請求處理完畢後,fastcgi子程序並不會隨之關閉,而是繼續等待主程序安排工作任務。

由此可知,fastcgi的工作效率是非常高的。

fastcgi工作流程:

web伺服器啟動時,初始化fastcgi的程式執行環境。例如nginx伺服器對應的ngx_ http_fastcgi_ module模組

fastcgl程序管理器自身初始化,啟動多個cgi直譯器程序並等待來自web伺服器的連線

當客戶端請求到達web伺服器時, web伺服器將該請求採用socket方式**到fastcgi主程序,fastcgi 主程序選擇並連線到乙個cgi直譯器(關聯fastcgi子程序),然後,web伺服器將cgi環境變數和標準輸入傳送到fastcgl子程序。

fastcgi子程序完成處理後,將標準輸出和錯誤資訊從同一socket連線返回給web伺服器。最後,fastcgi 子程序關閉與web伺服器之間的連線。

fastcgi子程序繼續等待並處理下乙個來自web伺服器的連線

fpm是fastcgi process manager的縮寫,那麼,fpm就是fastcgi程序管理器的簡稱。

php-fpm就是php中的fastcgi程序管理器。

對於php5.3之前的版本來說,php-fpm是乙個第三方的補丁包,旨在將fastcgi程序管理整合進php包中。

在php5.3之後的版本中,php-fpm不再是第三方的包,它已經被整合到php的原始碼中了。php-fpm提供了更好的php程序管理方式,可以有效控制記憶體和程序、可以平滑過載php配置,比spawn-fcgi具有更多優點,所以php-fpm被php官方收購了。

有關CGI FastCGI和PHP fpm的簡述

1 cgi概念 cgi是外部應用程式 cgi程式 與web伺服器之間的介面標準,是在cgi程式和web伺服器之間傳遞資訊的過程。在物理上是一段程式,執行在伺服器上,提供同客戶端html頁面的介面。只要某種語言具有標準輸入 輸出和環境變數,如perl php c等,就可以用來編寫cgi程式。工作原理 ...

cgi fast cgi和php fpm的關係簡介

cgi公共閘道器介面,就是程式語言包括php和nginx直接溝通的協議一樣。就是每次多個請求,每個請求都會fork 復刻,就是轉殖乙個一摸一樣的程序 來處理請求,這樣程序很多,效率很低,給伺服器帶來負擔 就是cgi的改良版版,多個請求都是乙個程序來處理,處理完就關閉程序 php fast cgi p...

ubuntu啟動php fpm 重啟php fpm

php fpm是一款簡單好用的php fastcgi程序管理工具。它可以和apache nginx或其他伺服器一起構建完整的php環境。接下來我們看看在更改了php.ini 檔案後,如何stop restart或者reload php fpm,以使修改生效。1 修改php.ini或www.conf?...