PHP-FPM、CGI、FASTCGI

1 CGI
(1)什么是CGI:
CGI(Common Gateway Interface)公共網(wǎng)關(guān)接口, 是WWW技術(shù)中最重要的技術(shù)之一,有著不可替代的重要地位, CGI是外部應(yīng)用程序(CGI程序)與Web服務(wù)器之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞消息的規(guī)程。CGI規(guī)范允許WEB服務(wù)器執(zhí)行外部程序,將他們的輸出發(fā)送給Web瀏覽器, CGI將Web的一組簡(jiǎn)單的超媒體文檔變成一個(gè)完整的新的交互式媒體。
(2)CGI的目的:
CGI是為了保證web server傳遞過(guò)來(lái)的數(shù)據(jù)是標(biāo)準(zhǔn)格式的,方便CGI程序的編寫(xiě)者。
(3)CGI的處理過(guò)程:
web server (比如nginx)只是內(nèi)容的分發(fā)者。
比如,如果請(qǐng)求/index.html, 那么web server會(huì)去文件系統(tǒng)中找到這個(gè)文件,發(fā)送給瀏覽器,這里分發(fā)的是靜態(tài)數(shù)據(jù)。
如果現(xiàn)在請(qǐng)求的是/index.php,根據(jù)配置文件,nginx知道這個(gè)不是靜態(tài)文件,需要去找PHP解析器來(lái)處理,那么它會(huì)把這個(gè)請(qǐng)求簡(jiǎn)單處理后交給PHP解析器。Nginx會(huì)傳那些數(shù)據(jù)給(如url,查詢(xún)字符串,POST數(shù)據(jù),HTTP header)PHP解析器呢?CGI就是規(guī)定要傳哪些數(shù)據(jù)、以什么樣的格式傳遞給后方處理這個(gè)請(qǐng)求的協(xié)議。
當(dāng)web server收到/index.php這個(gè)請(qǐng)求后,會(huì)啟動(dòng)對(duì)應(yīng)的CGI程序,這里就是PHP的解析器。接下來(lái)PHP解析器會(huì)解析php.ini文件,初始化執(zhí)行環(huán)境,然后處理請(qǐng)求,再以規(guī)定CGI規(guī)定的格式返回處理后的結(jié)果,退出進(jìn)程。web server再把結(jié)果返回給瀏覽器
(4)CGI的功能描述:
絕大多數(shù)的CGI程序被用來(lái)解釋處理來(lái)自表單的輸入信息, 并在服務(wù)器產(chǎn)生相應(yīng)的處理,或?qū)⑾鄳?yīng)的信息反饋給瀏覽器。CGI程序是網(wǎng)頁(yè)具有交互功能
(5)小結(jié):
過(guò)以上所述,CGI是個(gè)協(xié)議,跟進(jìn)程什么的沒(méi)有關(guān)系

2 Fastcgi
(1)Fastcgi的作用:
Fastcgi是用來(lái)提高CGI程序性能的。
(2)CGI程序的性能問(wèn)題:
”P(pán)HP解析器會(huì)解析php.ini文件,初始化執(zhí)行環(huán)境“,就是這里了。標(biāo)準(zhǔn)的CGI對(duì)每個(gè)請(qǐng)求都會(huì)執(zhí)行這次步驟(不嫌累呀!啟動(dòng)進(jìn)程很累的說(shuō)?。?,所以處理每個(gè)請(qǐng)求的時(shí)間會(huì)比較長(zhǎng),這明顯不合理!
(3)Fastcgi是做什么的:對(duì)進(jìn)程進(jìn)行管理
首先Fastcgi會(huì)先啟動(dòng)一個(gè)master,解析配置文件,初始化執(zhí)行環(huán)境,然后再啟動(dòng)多個(gè)worker。當(dāng)請(qǐng)求過(guò)來(lái)時(shí),master會(huì)傳遞給一個(gè)worker,然后立即可以接受下一個(gè)請(qǐng)求。這樣就避免了重復(fù)的勞動(dòng),效率自然是高。而且當(dāng)worker不夠用時(shí),master可以根據(jù)配置預(yù)先啟動(dòng)幾個(gè)worker等著;當(dāng)然空閑worker太多時(shí),也會(huì)停掉一些,這樣就提高了性能,也節(jié)約了資源。這就是fastcgi的對(duì)進(jìn)程的管理

3 PHP-FPM
php的解析器是php-cgi。php-cgi只是個(gè)CGI程序,他自己本身只能解析請(qǐng)求,返回結(jié)果,不會(huì)進(jìn)程管理,所以就出現(xiàn)里一些能夠調(diào)度php-cgi進(jìn)程的程序,而PHP-FPM就是能夠調(diào)度php-cgi進(jìn)程的程序中的一種。PHP-FPM在長(zhǎng)時(shí)間的發(fā)展后,逐漸得到了大家的認(rèn)可
PHP-FPM其實(shí)是PHP源代碼的一個(gè)補(bǔ)丁,旨在將FastCGI進(jìn)程管理整合進(jìn)PHP包中。必須將它patch你的PHP源代碼中,在編譯安裝PHP 后才可以使用。PHP5.3.3已經(jīng)繼承php-fpm了,不再是第三方的包了。PHP-FPM提供了更好的PHP進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn) 程,可以平滑重載PHP配置

4 小結(jié)
(1)cgi是公共網(wǎng)關(guān)接口,以進(jìn)程方式工作。即當(dāng)有請(qǐng)求時(shí)就創(chuàng)建一個(gè)cgi進(jìn)程,應(yīng)用程序結(jié)束時(shí)關(guān)閉cgi進(jìn)程 并退出內(nèi)存
(2)fastcgi是cgi的拓展,應(yīng)用程序結(jié)束時(shí),fastcgi進(jìn)程不退出內(nèi)存,而是等待下一個(gè)請(qǐng)求。php 的cgi方式都是fastcgi方式,在php4就是這樣的
(3)php-fpm是fastcgi管理器。在此之前,fastcgi進(jìn)程是由操作系統(tǒng)管理的,一旦某個(gè)fastcgi進(jìn)程發(fā)生故障,就可能危機(jī)操作系統(tǒng)的正常運(yùn)行.php-fpm的作用就是在操作系統(tǒng)和fastcgi之間建立一道圍墻,從而阻斷了fastcgi的故障向操作系統(tǒng)的傳播

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀(guān)點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容