FastCgi與PHP-fpm關係

1 CGI

(1)什麼是CGI: php

CGI(Common Gateway Interface)公共網關接口, 是WWW技術中最重要的技術之一,有着不可替代的重要地位, CGI是外部應用程序(CGI程序)與Web服務器之間的接口標準,是在CGI程序和Web服務器之間傳遞消息的規程。CGI規範容許WEB服務器執行外部程序,將他們的輸出發送給Web瀏覽器, CGI將Web的一組簡單的超媒體文檔變成一個完整的新的交互式媒體。 html

(2)CGI的目的: nginx

CGI是爲了保證web server傳遞過來的數據是標準格式的,方便CGI程序的編寫者。 web

(3)CGI的處理過程: 瀏覽器

web server (好比nginx)只是內容的分發者。 服務器

好比,若是請求/index.html, 那麼web server會去文件系統中找到這個文件,發送給瀏覽器,這裏分發的是靜態數據。 php-fpm

若是如今請求的是/index.php,根據配置文件,nginx知道這個不是靜態文件,須要去找PHP解析器來處理,那麼它會把這個請求簡單處理後交給PHP解析器。Nginx會傳那些數據給(如url,查詢字符串,POST數據,HTTP header)PHP解析器呢?CGI就是規定要傳哪些數據、以什麼樣的格式傳遞給後方處理這個請求的協議。 性能

當web server收到/index.php這個請求後,會啓動對應的CGI程序,這裏就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執行環境,而後處理請求,再以規定CGI規定的格式返回處理後的結果,退出進程。web server再把結果返回給瀏覽器 url

(4)CGI的功能描述: 操作系統

絕大多數的CGI程序被用來解釋處理來自表單的輸入信息, 並在服務器產生相應的處理,或將相應的信息反饋給瀏覽器。CGI程序是網頁具備交互功能

(5)小結:

過以上所述,CGI是個協議,跟進程什麼的沒有關係

2 Fastcgi

(1)Fastcgi的做用:

Fastcgi是用來提升CGI程序性能的。

(2)CGI程序的性能問題:

」PHP解析器會解析php.ini文件,初始化執行環境「,就是這裏了。標準的CGI對每一個請求都會執行此次步驟(不嫌累呀!啓動進程很累的說!),因此處理每一個請求的時間會比較長,這明顯不合理!

(3)Fastcgi是作什麼的:對進程進行管理

首先Fastcgi會先啓動一個master,解析配置文件,初始化執行環境,而後再啓動多個worker。當請求過來時,master會傳遞給一個worker,而後當即能夠接受下一個請求。這樣就避免了重複的勞動,效率天然是高。並且當worker不夠用時,master能夠根據配置預先啓動幾個worker等着;固然空閒worker太多時,也會停掉一些,這樣就提升了性能,也節約了資源。這就是fastcgi的對進程的管理


3 PHP-FPM

php的解析器是php-cgi。php-cgi只是個CGI程序,他本身自己只能解析請求,返回結果,不會進程管理,因此就出現裏一些可以調度php-cgi進程的程序,而PHP-FPM就是可以調度php-cgi進程的程序中的一種。PHP-FPM在長時間的發展後,逐漸獲得了你們的承認

PHP-FPM實際上是PHP源代碼的一個補丁,旨在將FastCGI進程管理整合進PHP包中。必須將它patch你的PHP源代碼中,在編譯安裝PHP 後才能夠使用。PHP5.3.3已經繼承php-fpm了,再也不是第三方的包了。PHP-FPM提供了更好的PHP進程管理方式,能夠有效控制內存和進 程,能夠平滑重載PHP配置


4 小結

(1)cgi是公共網關接口,以進程方式工做。即當有請求時就建立一個cgi進程,應用程序結束時關閉cgi進程 並退出內存

(2)fastcgi是cgi的拓展,應用程序結束時,fastcgi進程不退出內存,而是等待下一個請求。php 的cgi方式都是fastcgi方式,在php4就是這樣的

(3)php-fpm是fastcgi管理器。在此以前,fastcgi進程是由操做系統管理的,一旦某個fastcgi進程發生故障,就可能危機操做系統的正常運行.php-fpm的做用就是在操做系統和fastcgi之間創建一道圍牆,從而阻斷了fastcgi的故障向操做系統的傳播

相關文章
相關標籤/搜索