nginx php fastcgi安裝

CGI全稱是「公共網關接口」(Common Gateway Interface),HTTP服務器與你的或其它機器上的程序進行「交談」的一種工具,其程序須運行在網絡服務器上。 CGI能夠用任何一種語言編寫,只要這種語言具備標準輸入、輸出和環境變量。如php,perl,tcl等。php

FastCGI像是一個常駐 (long-live)型的CGI,它能夠一直執行着,只要激活後,不 會每次都要花費時間去fork一次(這是CGI最爲人詬病的fork-and-execute 模式)。它還支持分佈式的運算, 即 FastCGI 程序能夠在網站服務器之外的 主機上執行而且接受來自其它網站服務器來的請求。
FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行爲是將CGI 解釋器進程保持在 內存中並所以得到較高的性能。衆所周知,CGI 解釋器的反覆加載是CGI性能低下的主要緣由,若是CGI解釋器保持在 內存中並接受FastCGI 進程管理器調度,則能夠提供良好的性能、伸縮性、Fail- Over特性等等。
Nginx+FastCGI運行原理
Ngi nx不支持對外部程序的直接調用或者解析,全部的外部程序(包括PHP)必須經過FastCGI接口來調用。FastCGI接口在Linux下是socket,(這個socket能夠是文件socket,也能夠是ip socket)。爲了調用CGI程序,還須要一個FastCGI的wrapper(wrapper能夠理解爲用於啓動另外一個程序的程序),這個wrapper綁定在某個固定socket上,如端口或者文件socket。當Nginx將CGI請求發送給這個socket的時候,經過FastCGI接口,wrapper接納到請求,而後派生出一個新的線程,這個線程調用解釋器或者外部程序處理腳本並讀取返回數據;接着,wrapper再將返回的數據經過FastCGI接口,沿着固定的socket傳遞給Nginx;最後,Nginx將返回的數據發送給客戶端,這就是Nginx+FastCGI的整個運做過程。詳細的過程,如圖1所示。

 

spawn-fcgi與PHP-FPM前端

前面介紹過,FastCGI接口方式在腳本解析服務器上啓動一個或者多個守護進程對動態腳本進行解析,這些進程就是FastCGI進程管理器,或者稱之爲FastCGI引擎, spawn-fcgi與PHP-FPM就是支持PHP的兩個FastCGI進程管理器。
下面簡單介紹spawn-fcgi與PHP-FPM的異同。
 服務器

spawn-fcgi是HTTP服務器lighttpd的一部分,目前已經獨立成爲一個項目,通常與lighttpd配合使用來支持PHP,可是ligttpd的spwan-fcgi在高併發訪問的時候,會出現內存泄漏甚至自動重啓FastCGI的問題。
 網絡

Nginx是個輕量級的HTTP server,必須藉助第三方的FastCGI處理器才能夠對PHP進行解析,所以Nginx+spawn-fcgi的組合也能夠實現對PHP的解析,這裏不過多講述。
 架構

PHP-FPM也是一個第三方的FastCGI進程管理器,它是做爲PHP的一個補丁來開發的,在安裝的時候也須要和PHP源碼一塊兒編譯,也就是說PHP-FPM被編譯到PHP內核中,所以在處理性能方面更加優秀;同時它在處理高併發方面也比spawn-fcgi引擎好不少,所以,推薦Nginx+PHP/PHP-FPM這個組合對PHP進行解析。
 併發

FastCGI 的主要優勢是把動態語言和HTTP Server分離開來,因此Nginx與PHP/PHP-FPM常常被部署在不一樣的服務器上,以分擔前端Nginx服務器的壓力,使Nginx專注處理靜態請求和轉發動態請求,而PHP/PHP-FPM服務器專注解析PHP動態請求。app

從php5.3.3之後php-fpm就已是php的一部分了socket

http://book.51cto.com/art/201202/314842.htm分佈式

相關文章
相關標籤/搜索