最早的Web服務(wù)器簡(jiǎn)單地響應(yīng)瀏覽器發(fā)來的HTTP靜態(tài)文件請(qǐng)求,并將存儲(chǔ)在服務(wù)器上的靜態(tài)文件(例如: jpg阳仔、htm忧陪、html)返回給瀏覽器。
但如果涉及到動(dòng)態(tài)請(qǐng)求的話,就要通過CGI協(xié)議來共同約定:
—————————————————————————————————————
CGI協(xié)議(接口標(biāo)準(zhǔn))與CGI程序:
CGI(Common Gateway Interface) 是WWW技術(shù)中最重要的技術(shù)之一近范,有著不可替代的重要地位嘶摊。CGI是外部應(yīng)用程序(CGI程序)與[WEB服務(wù)器]之間的接口標(biāo)準(zhǔn),是在CGI程序和Web服務(wù)器之間傳遞信息的過程评矩。
遵循CGI協(xié)議, 使用perl叶堆、PHP、C等斥杜,就可以用來編寫CGI程序虱颗。(PHP中為php-cgi, php-cgi是 PHP的解釋器,它只是個(gè) CGI 程序蔗喂,只能解析請(qǐng)求忘渔,返回結(jié)果,不會(huì)進(jìn)程管理缰儿。)
CGI 應(yīng)用程序能與瀏覽器進(jìn)行交互,還可通過數(shù)據(jù)庫(kù)API 與數(shù)據(jù)庫(kù)服務(wù)器等外部數(shù)據(jù)源進(jìn)行通信,從數(shù)據(jù)庫(kù)服務(wù)器中獲取數(shù)據(jù),然后發(fā)送給給客戶端畦粮。
CGI的缺點(diǎn)--令人痛惡的 (fork-and-execute 模式):
CGI程序啟動(dòng)后,就會(huì)解析動(dòng)態(tài)腳本返弹,然后將結(jié)果返回給Web服務(wù)器锈玉,最后Web服務(wù)器再將結(jié)果返回給客戶端,剛才fork的進(jìn)程也會(huì)隨之關(guān)閉义起。這樣拉背,每次用戶請(qǐng)求動(dòng)態(tài)腳本,Web服務(wù)器都要重新fork一個(gè)新進(jìn)程默终,去啟動(dòng)CGI程序椅棺。
—————————————————————————————————————
目前主流服務(wù)器規(guī)避CGI弊端的兩種方式:
1犁罩、apche/tomcat- 內(nèi)置模塊
(例如tomcat內(nèi)置java運(yùn)行模塊 , apche內(nèi)置php_mod(PHP代碼解析器))
線程。
以php_mod為例:
apache服務(wù)器在啟動(dòng)的時(shí)候两疚,就會(huì)同時(shí)啟動(dòng)php模塊床估。當(dāng)客戶端請(qǐng)求php文件時(shí),apache服務(wù)器就不用再fork出一個(gè)新進(jìn)程來啟動(dòng)php解釋器诱渤,而是直接將php文件交給運(yùn)行中的php模塊處理丐巫。顯然,這種方式下勺美,效率會(huì)比較高递胧。
由于在apache服務(wù)器啟動(dòng)時(shí),才會(huì)讀取php的配置文件赡茸,加載php模塊缎脾,在apache的運(yùn)行過程中 ,不會(huì)再重新讀取php的配置文件占卧。所以遗菠,每次我們修改了php的配置文件后,必須重啟apache华蜒,新的php配置文件才會(huì)生效辙纬。
2、NIGNX- 配置類似PHP-FPM(JVM)的拓展管理(負(fù)載均衡分布式配置)
php-fpm使用多進(jìn)程模型友多,每個(gè)進(jìn)程只有一個(gè)線程牲平,每個(gè)線程只能處理一個(gè)客戶端訪問。
PHP-FPM:
是FastCGI進(jìn)程管理器的簡(jiǎn)稱域滥。php-fpm就是php中的FastCGI進(jìn)程管理器纵柿。對(duì)于php5.3之前的版本來說,php-fpm是一個(gè)第三方的補(bǔ)丁包启绰,旨在將FastCGI進(jìn)程管理整合進(jìn)PHP包中昂儒。在php5.3之后的版本中,php-fpm不再是第三方的包委可,它已經(jīng)被集成到php的源碼中了渊跋。php-fpm提供了更好的PHP進(jìn)程管理方式,可以有效控制內(nèi)存和進(jìn)程着倾、可以平滑重載PHP配置拾酝,比spawn-fcgi具有更多優(yōu)點(diǎn),所以php-fpm被PHP官方收購(gòu)了卡者。
而FastCGI是什么呢:
FastCGI是用來提高CGI程序性能的蒿囤。類似于CGI,F(xiàn)astCGI也可以說是一種協(xié)議,是對(duì)CGI的一個(gè)補(bǔ)充崇决。
FastCGI像是一個(gè)常駐(long-live)型的CGI材诽,它可以一直執(zhí)行著底挫,只要激活后,不會(huì)每次都要花費(fèi)時(shí)間去fork一次(這是CGI最為人詬病的fork-and-execute 模式)脸侥。它還支持分布式的運(yùn)算, 即 FastCGI 程序可以在網(wǎng)站服務(wù)器以外的主機(jī)上執(zhí)行并且接受來自其它網(wǎng)站服務(wù)器來的請(qǐng)求建邓。
—————————————————————————————————————
如果想知道如何NIGNX配置支持PHP-FPM拓展,參考我另一篇文章:
liunx( centos 7.0) 環(huán)境配置