什么是CGI
CGI全稱"通用網(wǎng)關(guān)接口"(Common Gateway Interface)贸街,用于HTTP服務(wù)器與其它機(jī)器上的程序服務(wù)通信交流的一種工具,CGI程序須運(yùn)行在網(wǎng)絡(luò)服務(wù)器上贞铣。
傳統(tǒng)CGI接口方式的主要缺點(diǎn)是性能較差,因?yàn)槊看蜨TTP服務(wù)器遇到動(dòng)態(tài)程序時(shí)都需要重啟解析器來執(zhí)行解析藕赞,然后結(jié)果被返回給HTTP服務(wù)器孤紧。這在處理高并發(fā)訪問幾乎是不可用的,因此就誕生了FastCGI吃既。另外傳統(tǒng)的CGI接口方式安全性也很差考榨。
什么是FastCGI
FastCGI是一個(gè)可伸縮地、高速地在HTTP服務(wù)器和動(dòng)態(tài)腳本語言間通信的接口(FastCGI接口在Linux下是socket(可以是文件socket鹦倚,也可以是ip socket))河质,主要優(yōu)點(diǎn)是把動(dòng)態(tài)語言和HTTP服務(wù)器分離開來。多數(shù)流行的HTTP服務(wù)器都支持FastCGI,包括Apache掀鹅、Nginx和lightpd散休。
同時(shí),F(xiàn)astCGI也被許多腳本語言所支持淫半,比較流行的腳本語言之一為PHP溃槐。FastCGI接口方式采用C/S架構(gòu),可以將HTTP服務(wù)器和腳本解析服務(wù)器分開科吭,同時(shí)在腳本解析服務(wù)器上啟動(dòng)一個(gè)或多個(gè)腳本解析守護(hù)進(jìn)程昏滴。當(dāng)HTTP服務(wù)器每次遇到動(dòng)態(tài)程序時(shí),可以將其直接交付給FastCGI進(jìn)程執(zhí)行对人,然后將得到的結(jié)構(gòu)返回給瀏覽器谣殊。這種方式可以讓HTTP服務(wù)器專一地處理靜態(tài)請(qǐng)求或者將動(dòng)態(tài)腳本服務(wù)器的結(jié)果返回給客戶端,這在很大程度上提高了整個(gè)應(yīng)用系統(tǒng)的性能牺弄。
FastCGI的重要特點(diǎn):
1姻几、FastCGI是HTTP服務(wù)器和動(dòng)態(tài)腳本語言間通信的接口或者工具。
2势告、FastCGI優(yōu)點(diǎn)是把動(dòng)態(tài)語言解析和HTTP服務(wù)器分離開來蛇捌。
3、Nginx咱台、Apache络拌、Lighttpd以及多數(shù)動(dòng)態(tài)語言都支持FastCGI。
4回溺、FastCGI接口方式采用C/S架構(gòu)春贸,分為客戶端(HTTP服務(wù)器)和服務(wù)端(動(dòng)態(tài)語言解析服務(wù)器)。
5遗遵、PHP動(dòng)態(tài)語言服務(wù)端可以啟動(dòng)多個(gè)FastCGI的守護(hù)進(jìn)程萍恕。
6、HTTP服務(wù)器通過FastCGI客戶端和動(dòng)態(tài)語言FastCGI服務(wù)端通信车要。
Nginx FastCGI的運(yùn)行原理
Nginx不支持對(duì)外部動(dòng)態(tài)程序的直接調(diào)用或者解析允粤,所有的外部程序(包括PHP)必須通過FastCGI接口來調(diào)用。FastCGI接口在Linux下是socket(可以是文件socket翼岁,也可以是ip socket)维哈。為了調(diào)用CGI程序,還需要一個(gè)FastCGI的wrapper登澜,這個(gè)wrapper綁定在某個(gè)固定socket上阔挠,如端口或者文件socket。當(dāng)Nginx將CGI請(qǐng)求發(fā)送給這個(gè)socket的時(shí)候脑蠕,通過FastCGI接口购撼,wrapper接收到請(qǐng)求跪削,然后派生出一個(gè)新的線程,這個(gè)線程調(diào)用解釋器或者外部程序處理腳本并讀取返回?cái)?shù)據(jù)迂求;接著碾盐,wrapper再將返回的數(shù)據(jù)通過FastCGI接口,沿著固定的socket傳遞給Nginx揩局;最后毫玖,Nginx將返回的數(shù)據(jù)發(fā)送給客戶端,這就是Nginx+FastCGI的整個(gè)運(yùn)作過程凌盯。
FastCGI的主要優(yōu)點(diǎn)是把動(dòng)態(tài)語言和HTTP服務(wù)器分離開來付枫,是Nginx專一處理靜態(tài)請(qǐng)求和向后轉(zhuǎn)發(fā)動(dòng)態(tài)請(qǐng)求,而PHP/PHP-FPM服務(wù)器專一解析PHP動(dòng)態(tài)請(qǐng)求驰怎。