字數1317 閱讀53 評論0 喜歡0php
什麼是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協 議的模塊。python
SAPI和CLI
SAPI(Server Application Programming Interface):服務器端應用程序接口
CLI(Command Line Interface):命令行接口web
php運行原理apache
php運行原理api
對於一個基於apache的php應用,運行流程能夠簡單歸結爲:
Apache -< httpd -< mod_php -< fastcgi -< sapi -< php瀏覽器
mod_php
在lamp體系中,mod_php是最常使用的工做方式。在這種模式下,php被編譯爲apache的一個內置模塊,在啓動加載的時候,當有一個php請求過來,直接在httpd進程裏完成了php的解釋運行,將結果返回。工做原理如圖所示:安全
1352901840_7545.jpg.jpeg服務器
普通cgi的工做流程:
CGI
英文全程是 Command Gateway Interface
, 一般翻譯爲公共網關接口,是HTTP服務器與機器上的其餘程序進行通訊的一個接口。這個「其餘程序」能夠是使用任何計算機語言進行編寫,例如 php,python,perl等等。它經過CGI這個接口從HTTP服務器取得輸入,而後把運行結果又經過CGI這個接口交給HTTP服務器,而 HTTP服務器把這個結果送給瀏覽器。
CGI的出現讓WEB從靜態變爲動態,隨着web的愈來愈普及,不少的網站都須要有動態的頁面,以便與瀏覽 者進行交互。CGI的缺點也愈來愈突出,由於HTTP要生成一個動態頁面,系統就必須啓動一個新的進程以運行CGI程序,不斷的fork是一項很消耗時間 和資源的工做。架構
(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應用,工做流程以下:tcp
1352903096_3206.jpg.jpeg
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