有關CGI FastCGI和PHP fpm的簡述

2021-08-11 19:31:13 字數 1593 閱讀 6780

1、cgi概念

cgi是外部應用程式(cgi程式)與web伺服器之間的介面標準,是在cgi程式和web伺服器之間傳遞資訊的過程。

在物理上是一段程式,執行在伺服器上,提供同客戶端html頁面的介面。

只要某種語言具有標準輸入、輸出和環境變數,如perl、php、c等,就可以用來編寫cgi程式。

工作原理:

1.瀏覽器通過html表單或超連結請求指向乙個cgi應用程式的url。

2.伺服器收發到請求。

3.伺服器執行指定cgi應用程式。

4.cgi應用程式執行所需要的操作,通常是基於瀏覽者輸入的內容。

5.cgi應用程式把結果格式化為網路伺服器和瀏覽器能夠理解的文件(通常是html網頁)。

6.網路伺服器把結果返回到瀏覽器中。

2.fastcgi

fastcgi是cgi的更高階的一種方式,是用來提高cgi程式效能的。

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

3、php-fpm (php-fastcgi process manager)

他是乙個實現了fastcgi協議的程式,用來管理fastcgi起的程序的,即能夠排程php-cgi程序的程式。

4、cgi相較於fastcgi而言其效能瓶頸**自知乎)

cgi針對每個http請求都是fork乙個新程序來進行處理,處理過程包括解析php.ini檔案,初始化執行環境等,然後這個程序會把處理完的資料返回給web伺服器,最後web伺服器把內容傳送給使用者,剛才fork的程序也隨之退出。 如果下次使用者還請求動態資源,那麼web伺服器又再次fork乙個新程序,周而復始的進行。

fastcgi則會先fork乙個master,解析配置檔案,初始化執行環境,然後再fork多個worker。當請求過來時,master會傳遞給乙個worker,然後立即可以接受下乙個請求。這樣就避免了重複的勞動,效率自然是高。而且當worker不夠用時,master可以根據配置預先啟動幾個worker等著;當然空閒worker太多時,也會停掉一些,這樣就提高了效能,也節約了資源。這就是fastcgi的對程序的管理。大多數fastcgi實現都會維護乙個程序池。

master和worker程序:

master程序只有乙個,負責監聽埠,接收來自web server的請求。

worker 有一到多個,具體數量會在fpm的配置中定義。

每個程序內部都會嵌入php解析器,是php**執行的地方。即worker來處理php**。

master監聽埠是 9000,通過nginx方向**9000埠。

5、fastcgi與cgi特點:

對於cgi來說,每乙個web請求php都必須重新解析php.ini、重新載入全部擴充套件,並重初始化全部資料結構。而使用fastcgi,所有這些都只在程序啟動時發生一次。乙個額外的好處是,持續資料庫連線(persistent database connection)可以工作。

由於fastcgi是多程序,所以比cgi多執行緒消耗更多的伺服器記憶體,php-cgi直譯器每程序消耗7至25兆記憶體,將這個數字乘以50或100就是很大的記憶體數

cgi fast cgi和php fpm的關係簡介

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

CGI FastCGI和php fpm的概念和區別

1.使用者通過http協議發起請求,請求會先抵達lnmp架構中的nginx 2.nginx會根據使用者的請求進行判斷,這個判斷是由location完成的 3.判斷使用者請求的是靜態頁面,nginx直接進行處理 4.判斷使用者的請求是動態頁面,nginx會將該請求交給fastcgi協議下發 7.如果有...

ECS配置mySQL MariaDB和PHP環境

我們使用apache php mysql來配置環境 作業系統 centos 一 配置apache 之間過程根據提示輸入y允許安裝安裝之後開啟apache bin systemctl start httpd.service二 配置mysql mariadb mariadb資料庫管理系統是mysql的乙...