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