CGI與fastcgi與php-fpm與php-cgi的關系

cgi是一個協(xié)議,它規(guī)定了服務器Nginx會將那些數(shù)據(jù)傳送給php-cgi

fastcgi也可以說是一個協(xié)議伦乔。fastcgi是對cgi的性能的一次提高勇吊。fastcgi會先啟動一個master辫愉,解析配置文件(php.ini等)署辉,初始化執(zhí)行環(huán)境,然后再啟動多個worker岩四,當請求過來時哭尝,master會傳遞給一個worker,然后等待下一個請求剖煌。

php-fpm是實現(xiàn)了fastcgi這個協(xié)議的程序材鹦,用來管理php-cgi的(php-fpm是fastcgi進程管理器)

php-cgi是解釋php程序的

剛開始對這個問題我也挺糾結的,看了《HTTP權威指南》后耕姊,感覺清晰了不少桶唐。

首先,CGI是干嘛的茉兰?CGI是為了保證web server傳遞過來的數(shù)據(jù)是標準格式的尤泽,方便CGI程序的編寫者。

web server(比如說nginx)只是內(nèi)容的分發(fā)者规脸。比如坯约,如果請求/index.html,那么web server會去文件系統(tǒng)中找到這個文件莫鸭,發(fā)送給瀏覽器闹丐,這里分發(fā)的是靜態(tài)數(shù)據(jù)。好了被因,如果現(xiàn)在請求的是/index.php卿拴,根據(jù)配置文件,nginx知道這個不是靜態(tài)文件梨与,需要去找PHP解析器來處理堕花,那么他會把這個請求簡單處理后交給PHP解析器。Nginx會傳哪些數(shù)據(jù)給PHP解析器呢粥鞋?url要有吧航徙,查詢字符串也得有吧,POST數(shù)據(jù)也要有,HTTP header不能少吧到踏,好的杠袱,CGI就是規(guī)定要傳哪些數(shù)據(jù)、以什么樣的格式傳遞給后方處理這個請求的協(xié)議窝稿。仔細想想楣富,你在PHP代碼中使用的用戶從哪里來的。

當web server收到/index.php
這個請求后伴榔,會啟動對應的CGI程序纹蝴,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件踪少,初始化執(zhí)行環(huán)境塘安,然后處理請求,再以規(guī)定CGI規(guī)定的格式返回處理后的結果援奢,退出進程兼犯。web server再把結果返回給瀏覽器。

好了集漾,CGI是個協(xié)議切黔,跟進程什么的沒關系。那fastcgi又是什么呢具篇?Fastcgi是用來提高CGI程序性能的纬霞。

提高性能,那么CGI程序的性能問題在哪呢驱显?"PHP解析器會解析php.ini文件诗芜,初始化執(zhí)行環(huán)境",就是這里了埃疫。標準的CGI對每個請求都會執(zhí)行這些步驟(不閑累熬钅啊!啟動進程很累的說H刍帧)脐湾,所以處理每個時間的時間會比較長。這明顯不合理嘛叙淌!那么Fastcgi是怎么做的呢秤掌?首先,F(xiàn)astcgi會先啟一個master鹰霍,解析配置文件闻鉴,初始化執(zhí)行環(huán)境,然后再啟動多個worker茂洒。當請求過來時孟岛,master會傳遞給一個worker,然后立即可以接受下一個請求。這樣就避免了重復的勞動渠羞,效率自然是高斤贰。而且當worker不夠用時,master可以根據(jù)配置預先啟動幾個worker等著次询;當然空閑worker太多時荧恍,也會停掉一些,這樣就提高了性能屯吊,也節(jié)約了資源送巡。這就是fastcgi的對進程的管理。

那PHP-FPM又是什么呢盒卸?是一個實現(xiàn)了Fastcgi的程序骗爆,被PHP官方收了。

大家都知道蔽介,PHP的解釋器是php-cgi摘投。php-cgi只是個CGI程序,他自己本身只能解析請求屉佳,返回結果谷朝,不會進程管理(皇上洲押,臣妾真的做不到拔浠ā!)所以就出現(xiàn)了一些能夠調度php-cgi進程的程序杈帐,比如說由lighthttpd分離出來的spawn-fcgi体箕。好了PHP-FPM也是這么個東東,在長時間的發(fā)展后挑童,逐漸得到了大家的認可(要知道累铅,前幾年大家可是抱怨PHP-FPM穩(wěn)定性太差的),也越來越流行站叼。

網(wǎng)上有的說娃兽,fastcgi是一個協(xié)議,php-fpm實現(xiàn)了這個協(xié)議

對尽楔。

有的說投储,php-fpm是fastcgi進程的管理器,用來管理fastcgi進程的

對阔馋。php-fpm的管理對象是php-cgi玛荞。但不能說php-fpm是fastcgi進程的管理器,因為前面說了fastcgi是個協(xié)議呕寝,似乎沒有這么個進程存在勋眯,就算存在php-fpm也管理不了他(至少目前是)。 有的說,php-fpm是php內(nèi)核的一個補丁

以前是對的客蹋。因為最開始的時候php-fpm沒有包含在PHP內(nèi)核里面塞蹭,要使用這個功能,需要找到與源碼版本相同的php-fpm對內(nèi)核打補丁嚼酝,然后再編譯浮还。后來PHP內(nèi)核集成了PHP-FPM之后就方便多了,使用--enalbe-fpm這個編譯參數(shù)即可闽巩。

有的說钧舌,修改了php.ini配置文件后,沒辦法平滑重啟涎跨,所以就誕生了php-fpm

是的洼冻,修改php.ini之后,php-cgi進程的確是沒辦法平滑重啟的隅很。php-fpm對此的處理機制是新的worker用新的配置撞牢,已經(jīng)存在的worker處理完手上的活就可以歇著了,通過這種機制來平滑過度叔营。

還有的說PHP-CGI是PHP自帶的FastCGI管理器屋彪,那這樣的話干嗎又弄個php-fpm出

不對。php-cgi只是解釋PHP腳本的程序而已绒尊。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畜挥,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子婴谱,更是在濱河造成了極大的恐慌蟹但,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谭羔,死亡現(xiàn)場離奇詭異华糖,居然都是意外死亡,警方通過查閱死者的電腦和手機瘟裸,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門客叉,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人话告,你說我怎么就攤上這事兼搏。” “怎么了超棺?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵向族,是天一觀的道長。 經(jīng)常有香客問我棠绘,道長件相,這世上最難降的妖魔是什么再扭? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮夜矗,結果婚禮上泛范,老公的妹妹穿的比我還像新娘。我一直安慰自己紊撕,他們只是感情好罢荡,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著对扶,像睡著了一般区赵。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上浪南,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天笼才,我揣著相機與錄音,去河邊找鬼络凿。 笑死骡送,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的絮记。 我是一名探鬼主播摔踱,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼怨愤!你這毒婦竟也來了派敷?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤憔四,失蹤者是張志新(化名)和其女友劉穎膀息,沒想到半個月后般眉,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體了赵,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年甸赃,在試婚紗的時候發(fā)現(xiàn)自己被綠了柿汛。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡埠对,死狀恐怖淆九,靈堂內(nèi)的尸體忽然破棺而出缓苛,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布鸦泳,位于F島的核電站,受9級特大地震影響诬像,放射性物質發(fā)生泄漏跪腹。R本人自食惡果不足惜昌腰,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望膀跌。 院中可真熱鬧遭商,春花似錦、人聲如沸捅伤。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽丛忆。三九已至祠汇,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間熄诡,已是汗流浹背座哩。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留粮彤,地道東北人根穷。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓,卻偏偏與公主長得像导坟,于是被迫代替她去往敵國和親屿良。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容

  • 首先惫周,CGI是干嘛的尘惧?CGI是為了保證web server傳遞過來的數(shù)據(jù)是標準格式的,方便CGI程序的編寫者递递。 w...
    石樂志的LK閱讀 529評論 2 9
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成喷橙,其中,內(nèi)核的設計非常微小和簡潔登舞,完成的工作也非常簡單...
    rosekissyou閱讀 10,196評論 5 124
  • 原文github地址 1.PHP概述 1.1 PHP的歷史發(fā)展 1995年由Lerdorf創(chuàng)建PHP贰逾,高級腳本語言...
    10xjzheng閱讀 1,488評論 0 2
  • Nginx的工作原理 1.Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成,其中菠秒,內(nèi)核的設計非常微小和簡潔疙剑,...
    架構飛毛腿閱讀 5,997評論 1 27
  • 轉載https://segmentfault.com/q/1010000000256516 首先,CGI是干嘛的践叠?...
    simple_five閱讀 912評論 1 4