php,cgi兆旬, fast-cgi和php-fpm的理解

CGI 簡介
CGI全稱是“通用網(wǎng)關(guān)接口”(Common Gateway Interface),它可以讓一個客戶端怎栽,從網(wǎng)頁瀏覽器向執(zhí)行在Web服務(wù)器上的程序請求數(shù)據(jù)丽猬。 CGI描述了客戶端和這個程序之間傳輸數(shù)據(jù)的一種標(biāo)準(zhǔn)。 CGI的一個目的是要獨(dú)立于任何語言的熏瞄,所以CGI可以用任何一種語言編寫脚祟,只要這種語言具有標(biāo)準(zhǔn)輸入、輸出和環(huán)境變量强饮。 如php由桌,perl,tcl等。

CGI 的運(yùn)行原理
客戶端訪問某個 URL 地址之后行您,通過 GET/POST/PUT 等方式提交數(shù)據(jù)铭乾,并通過 HTTP 協(xié)議向 Web 服務(wù)器發(fā)出請求。
服務(wù)器端的 HTTP Daemon(守護(hù)進(jìn)程)啟動一個子進(jìn)程娃循。然后在子進(jìn)程中炕檩,將 HTTP 請求里描述的信息通過標(biāo)準(zhǔn)輸入 stdin 和環(huán)境變量傳遞給 URL 指定的 CGI 程序,并啟動此應(yīng)用程序進(jìn)行處理捌斧,處理結(jié)果通過標(biāo)準(zhǔn)輸出 stdout 返回給 HTTP Daemon 子進(jìn)程笛质。
再由 HTTP Daemon 子進(jìn)程通過 HTTP 協(xié)議返回給客戶端。

上面的這段話理解可能還是比較抽象捞蚂,下面我們就通過一次 GET 請求為例進(jìn)行詳細(xì)說明妇押。

Paste_Image.png

如圖所示,本次請求的流程如下:
1:客戶端訪問 http://127.0.0.1:9003/cgi-bin/user?id=1
2:127.0.0.1 上監(jiān)聽 9003 端口的守護(hù)進(jìn)程接受到該請求姓迅,通過解析 HTTP 頭信息舆吮,得知是 GET 請求,并且請求的是 /cgi-bin/目錄下的 user文件队贱。
3:將 uri 里的 id=1通過存入 QUERY_STRING環(huán)境變量色冀。
4:http守護(hù)進(jìn)程 fork 一個子進(jìn)程,然后在子進(jìn)程中執(zhí)行 user 程序柱嫌,通過環(huán)境變量獲取到id锋恬。
5:執(zhí)行完畢之后,將結(jié)果通過標(biāo)準(zhǔn)輸出返回到子進(jìn)程编丘。
6:子進(jìn)程將結(jié)果返回給客戶端与学。

所以cgi模式下,一個客戶端進(jìn)行一次web服務(wù)器請求的流程為:
客戶端---->web服務(wù)器----->cgi(由web子進(jìn)程創(chuàng)建的cgi程序)------>應(yīng)用程序(比如php)
處理完這次請求后web子進(jìn)程退出嘉抓,cgi進(jìn)程也退出索守。

FastCGI 簡介
FastCGI是Web服務(wù)器和處理程序之間通信的一種協(xié)議, 是CGI的一種改進(jìn)方案抑片,FastCGI像是一個常駐(long-lived)型的CGI卵佛, 它可以一直執(zhí)行,在請求到達(dá)時(shí)不會花費(fèi)時(shí)間去fork一個進(jìn)程來處理(這是CGI最為人詬病的fork-and-execute模式)敞斋。 正是因?yàn)樗皇且粋€通信協(xié)議截汪,它還支持分布式的運(yùn)算,所以 FastCGI 程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行植捎,并且可以接受來自其它網(wǎng)站服務(wù)器的請求衙解。
FastCGI 是與語言無關(guān)的、可伸縮架構(gòu)的 CGI 開放擴(kuò)展焰枢,將 CGI 解釋器進(jìn)程保持在內(nèi)存中蚓峦,以此獲得較高的性能舌剂。 CGI 程序反復(fù)加載是 CGI 性能低下的主要原因,如果 CGI 程序保持在內(nèi)存中并接受 FastCGI 進(jìn)程管理器調(diào)度暑椰, 則可以提供良好的性能霍转、伸縮性、Fail-Over 特性等干茉。

FastCGI 工作流程如下:
1:FastCGI 進(jìn)程管理器自身初始化谴忧,啟動多個 CGI 解釋器進(jìn)程,并等待來自 Web Server 的連接角虫。
2:Web 服務(wù)器與 FastCGI 進(jìn)程管理器進(jìn)行 Socket 通信沾谓,通過 FastCGI 協(xié)議發(fā)送 CGI 環(huán)境變量和標(biāo)準(zhǔn)輸入數(shù)據(jù)給 CGI 解釋器進(jìn)程。
3:CGI 解釋器進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯誤信息從同一連接返回 Web Server戳鹅。
4:CGI 解釋器進(jìn)程接著等待并處理來自 Web Server 的下一個連接均驶。

所以fast-cgi模式下,一個客戶端進(jìn)行一次web服務(wù)器請求的流程為:
客戶端---->web服務(wù)器---->fast-cgi進(jìn)程管理器--->cgi解釋器--->應(yīng)用程序枫虏。

FastCGI 與傳統(tǒng) CGI 模式的區(qū)別之一則是 Web 服務(wù)器不是直接執(zhí)行 CGI 程序了妇穴,而是通過 Socket 與 FastCGI 響應(yīng)器(FastCGI 進(jìn)程管理器)進(jìn)行交互,也正是由于 FastCGI 進(jìn)程管理器是基于 Socket 通信的隶债,所以也是分布式的腾它,Web 服務(wù)器可以和 CGI 響應(yīng)器服務(wù)器分開部署。Web 服務(wù)器需要將數(shù)據(jù) CGI/1.1 的規(guī)范封裝在遵循 FastCGI 協(xié)議包中發(fā)送給 FastCGI 響應(yīng)器程序死讹。
參考:cgi與fast-cgi

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞒滴,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子赞警,更是在濱河造成了極大的恐慌妓忍,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愧旦,死亡現(xiàn)場離奇詭異世剖,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)笤虫,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門旁瘫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人耕皮,你說我怎么就攤上這事境蜕。” “怎么了凌停?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長售滤。 經(jīng)常有香客問我罚拟,道長台诗,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任赐俗,我火速辦了婚禮拉队,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘阻逮。我一直安慰自己粱快,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布叔扼。 她就那樣靜靜地躺著事哭,像睡著了一般。 火紅的嫁衣襯著肌膚如雪瓜富。 梳的紋絲不亂的頭發(fā)上鳍咱,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天,我揣著相機(jī)與錄音与柑,去河邊找鬼谤辜。 笑死,一個胖子當(dāng)著我的面吹牛价捧,可吹牛的內(nèi)容都是我干的丑念。 我是一名探鬼主播,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼结蟋,長吁一口氣:“原來是場噩夢啊……” “哼脯倚!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起椎眯,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤挠将,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后编整,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舔稀,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年掌测,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了内贮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡汞斧,死狀恐怖夜郁,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情粘勒,我是刑警寧澤竞端,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站庙睡,受9級特大地震影響事富,放射性物質(zhì)發(fā)生泄漏技俐。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一统台、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧贱勃,春花似錦井赌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至拔鹰,卻和暖如春仪缸,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背列肢。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工恰画, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人瓷马。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓拴还,卻偏偏與公主長得像,于是被迫代替她去往敵國和親欧聘。 傳聞我的和親對象是個殘疾皇子片林,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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

  • 0 系列目錄# WEB請求處理 WEB請求處理一:瀏覽器請求發(fā)起處理 WEB請求處理二:Nginx請求反向代理 本...
    七寸知架構(gòu)閱讀 13,921評論 22 190
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)怀骤,斷路器费封,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 1. Nginx的模塊與工作原理 Nginx由內(nèi)核和模塊組成,其中蒋伦,內(nèi)核的設(shè)計(jì)非常微小和簡潔弓摘,完成的工作也非常簡單...
    rosekissyou閱讀 10,202評論 5 124
  • 背景 PHP最常用的方式是以模塊的方式(mod_php)運(yùn)行在Apache中,也是Apache運(yùn)行PHP的默認(rèn)方式...
    柏樹_Jeff閱讀 978評論 1 11
  • 網(wǎng)上對于FastCGI與mod_php的知識比較雜亂而不全面痕届,故在此整理一下韧献,以便入門學(xué)習(xí)者查閱方便。 背景PHP...
    php紅薯閱讀 1,583評論 3 32