1. 程式人生 > >LNP環境下Nginx與PHP配合解析的原理

LNP環境下Nginx與PHP配合解析的原理

發的 nag 自我 處理 php解析 系統 線程 指正 靜態

正在理解中,查閱資料,加上自我理解,得出如下結論,如有錯誤,歡迎指正。。。。

LNP環境,Nginx與PHP配合運行的原理解釋:

以前的互聯網時代我們成為web1.0時代,那時用戶是被動接受網絡信息,服務器上有什麽你就看什麽,你不能往服務器上傳東西,並且主要以靜態文件為主,幾乎沒有動態程序,所以Nginx處理起來很輕松。但是隨著祖國的強大,時代和技術的進步,web2.0時代來臨,用戶為主,動態語言也流行了起來,例如php、java等,所以網絡上動態請求就多了起來,但是Nginx有不能處理動態請求,所以隨之而來的動態程序解析器就應運而生了,PHP的解析器,Java的解析器等,但是問題來了,Nginx怎麽把接受到的動態請求交給解析器呢?解析器處理之後又怎麽返回給Nginx呢?所以出現了CGI(common gateway interface)通用網關接口,通過這個接口實現兩者之間的通信,怎麽通信呢?

CGI的特點是,每接到一個請求就啟動解析器,fork一個進程來解析,完成之後呢就把這個進程kill掉,每次都是這樣,可想而知,不僅浪費系統資源,還無法處理高並發的請求,滿足不了web2.0時代的廣大網友。所以FASTCGI出來了,一看名字就比較快,他fork進程之後不kill,保留下來以便下次使用,效率就高了許多。

接著講Nginx怎麽通過這個接口實現通信,Nginx有一個fastcgi模塊,Nginx通過fastcgi監聽PHP程序運行的地址和端口,當有動態程序訪問Nginx時,Nginx通過fastcgi_pass拋給PHP處理,PHP處理完成後通過FASTCGI接口返回給Nginx,然後Nginx返回給用戶。那麽PHP又是怎麽處理的呢?

php收到Nginx拋過來的動態程序時,首先是php-fpm(php fastcgi process manager)php fastcgi 進程管理接收到,然後他會調用一個wrapper線程去激活php解析器,把動態請求解析為op code(操作碼)進行處理,之後把處理結果返回給php-fpm,一路返回給用戶。

LNP環境下Nginx與PHP配合解析的原理