那nginx是怎么調(diào)用php的呢?先看下面的nginx中關(guān)于php的配置
location ~ /.php$ { root /webpath; fastcgi_pass 127.0.0.1:9000; … ... }
這個(gè)location指令把以php為文件后綴的請(qǐng)求,交給127.0.0.1:9000處理。我想你看到這個(gè)應(yīng)該猜到了,這是一個(gè)C/S架構(gòu)東西。 而這里的IP地址和端口(127.0.0.1:9000)就是fastcgi進(jìn)程監(jiān)聽的IP地址和端口。fastcgi是一個(gè)可伸縮地、高速地在http server和動(dòng)態(tài)腳本語言間通信的接口。多數(shù)流行的http server都支持fastcgi,包括apache、nginx和lighttpd等。同時(shí),fastcgi也被許多腳本語言支持,其中就有php。
那這個(gè)fastcgi的配置IP和端口從何而來呢?在php-fpm.conf中可以看到如下:
listen = 127.0.0.1:9000 #這個(gè)表示php的fastcgi進(jìn)程監(jiān)聽的ip地址以及端口pm.start_servers = 2php-fpm作為fastcgi的進(jìn)程管理器,可以有效控制內(nèi)存和進(jìn)程,并且平滑重載php配置。php5.3以后,php-fpm被集成到php的core中,默認(rèn)安裝,無須配置。
fastcgi進(jìn)程管理器php-fpm自身初始化,啟動(dòng)主進(jìn)程php-fpm和啟動(dòng)start_servers個(gè)fastcgi子進(jìn)程。主進(jìn)程php-fpm主要是管理fastcgi子進(jìn)程,監(jiān)聽9000端口,fastcgi子進(jìn)程等待請(qǐng)求。當(dāng)客戶端請(qǐng)求到達(dá)nginx時(shí),nginx通過location指令,將所有以php為后綴的文件都交給 127.0.0.1:9000 來處理。php-fpm選擇并連接到一個(gè)fastcgi子進(jìn)程,并將html' target='_blank'>環(huán)境變量和標(biāo)準(zhǔn)輸入發(fā)送到fastcgi子進(jìn)程。fastcgi子進(jìn)程完成處理后將標(biāo)準(zhǔn)輸出和錯(cuò)誤信息返回。當(dāng)fastcgi子進(jìn)程關(guān)閉連接時(shí),請(qǐng)求便告處理完成,等待下次處理。
普通的cgi模式是進(jìn)程 但存在一個(gè)問題 每來一個(gè)請(qǐng)求 就必須fork一個(gè)進(jìn)程 導(dǎo)致效率緩慢
所以才有了 fast cgi fpm就是 fast cgi manager
fpm的模式也是進(jìn)程 但他會(huì)prefork 就是服務(wù)啟動(dòng)的時(shí)候 先fork一部分進(jìn)程等待處理請(qǐng)求。
相關(guān)推薦:
Nginx和PHP-FPM的啟動(dòng)、重啟、停止腳本
設(shè)置nginx和PHP上傳文件大小限制
mac下安裝nginx和php_PHP教程
以上就是nginx和php之間工作原理的詳細(xì)內(nèi)容,更多請(qǐng)關(guān)注 其它相關(guān)文章!
鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請(qǐng)第一時(shí)間聯(lián)系我們修改或刪除,多謝。
新聞熱點(diǎn)
疑難解答
圖片精選