什么是mod_php和mod_fastcgi
在lamp體系中,對于apache端的php的配置,我們最常用的就是mod_php,它把php作為apache一個內置的模塊.讓apache http服務器本身能夠支持php語言,不需要每一個請求就啟動php解釋器來解釋php.
和把webserver與php綁定起來的方式不同,fastcgi是http服務器與你的或其它機器上的程序進行“交談”的一種工具,相當于一個程序接口。它可以接受來自web服務器的請求,解釋輸入信息,將處理后的結果返回給服務器等。mod_fastcgi就是在apache下支持fastcgi協議的模塊。
SAPI和CLI
SAPI(Server Application Programming Interface):服務器端應用程序接口
CLI(Command Line Interface):命令行接口
php運行原理
對于一個基于apache的php應用,運行流程可以簡單歸結為:
Apache -> httpd -> mod_php -> fastcgi -> sapi -> php
mod_php
在lamp體系中,mod_php是最常使用的工作方式。在這種模式下,php被編譯為apache的一個內置模塊,在啟動加載的時候,當有一個php請求過來,直接在httpd進程里完成了php的解釋運行,將結果返回。工作原理如圖所示:
mod_fastcgi
普通cgi的工作流程:
CGI英文全程是 Command Gateway Interface,通常翻譯為公共網關接口,是HTTP服務器與機器上的其他程序進行通信的一個接口。這個“其他程序”可以是使用任何計算機語言進行編寫,例如php,python,perl等等。它通過CGI這個接口從HTTP服務器取得輸入,然后把運行結果又通過CGI這個接口交給HTTP服務器,而HTTP服務器把這個結果送給瀏覽器。
CGI的出現讓WEB從靜態變為動態,隨著web的越來越普及,很多的網站都需要有動態的頁面,以便與瀏覽者進行交互。CGI的缺點也越來越突出,因為HTTP要生成一個動態頁面,系統就必須啟動一個新的進程以運行CGI程序,不斷的fork是一項很消耗時間和資源的工作。
fastcgi工作原理:
(1)web server 啟動時載入Fastcgi進程管理器。[php的fastcgi進程管理器是PHP-FPM(php-FastCGI Process Manager)]
(2)Fastcgi進程管理器自身初始化,啟動多個CGI解釋器進程并且等待來自web server的連接。啟動php-cgi Fastcgi進程時,可以配置TCP和unix套接字兩種方式。一般生產環境中采用TCP方式
(3)當客戶端請求到達web server時,web server 通過tcp協議或者unix套接字的方式將請求轉發給Fastcgi主進程,Fastcgi主進程選擇并連接一個cgi進程。
(4)Fastcgi子進程完成php程序流程處理后將標準輸出和錯誤信息一同返回給web server。當Fastcgi子進程關閉時,請求便告處理完成。Fastcgi子進程便接著等待來自Fastcgi進程管理器的下一個連接。
(5)fastcgi是基于cgi架構的擴展,他的核心思想就是在web server和具體cgi程序之間建立一個智能的可持續的中間層,統管cgi程序的運行,這樣web server只需要將請求提交給這個層,這個層再派生出幾個可復用的cgi程序實例,然后再把請求分發給這些實例,這些實例是可控的,可持續,可復用的。mod_fastcgi的主要優點是把動態語言和web server分離開來。這種技術允許把web server 和 動態語言運行在不同的主機上,以大規模擴展和改進安全性而不損失生產效率。
基于mod_fastcgi方式的php應用,工作流程如下:
mod_fastcgi遠程配置方式
fastcgi實例和apache分離開來,這兩者可以分開來部署。他們之間的通信通過tcp或者unix sock來完成。使用ext方式,fastcgi實例是獨立運行的。
php-fpm
使用fastcgi,最主要的優點是把應用和web server(apache)分離開來。這樣允許把web server 和動態語言(php)運行在不同的主機上,以大規模擴展和改進安全性而不損失效率。
這樣情況下,對于php-cgi程序,由于從apache中分離出來,就需要一個單獨的工具來對這些進程進行管理,幸運的就是php-fpm的出現。
特性
(1)php守護進程:pid file,log file,setsid(),setuid(),setgid(),chroot()
(2)進程控制,可以平滑的重啟,重新載入配置和二進制模塊而不丟失請求
(3)限制ip地址,可以滿足web server的要求
(4)使用用不同的uid/gid/chroot/環境變量,不同的php.ini選項,不需要safe mode
(5)記錄word process的stdout和stderr
(6)如果set_time_limit沒有起作用,強制結束過期進程
特色功能:
(1)fastcgi_finish_request()函數:響應完成,關閉連接
(2)優化上傳支持
(3)特色功能Error header
參考文獻:
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
