FastCgi與PHP-fpm關系


1 CGI 
(1)什么是CGI:
CGI(Common Gateway Interface)公共網關接口, 是WWW技術中最重要的技術之一,有着不可替代的重要地位, CGI是外部應用程序(CGI程序)與Web服務器之間的接口標准,是在CGI程序和Web服務器之間傳遞消息的規程。CGI規范允許WEB服務器執行外部程序,將他們的輸出發送給Web瀏覽器, CGI將Web的一組簡單的超媒體文檔變成一個完整的新的交互式媒體。
(2)CGI的目的:
CGI是為了保證web server傳遞過來的數據是標准格式的,方便CGI程序的編寫者。
(3)CGI的處理過程:
web server (比如nginx)只是內容的分發者。
比如,如果請求/index.html, 那么web server會去文件系統中找到這個文件,發送給瀏覽器,這里分發的是靜態數據。
如果現在請求的是/index.php,根據配置文件,nginx知道這個不是靜態文件,需要去找PHP解析器來處理,那么它會把這個請求簡單處理后交給PHP解析器。Nginx會傳那些數據給(如url,查詢字符串,POST數據,HTTP header)PHP解析器呢?CGI就是規定要傳哪些數據、以什么樣的格式傳遞給后方處理這個請求的協議。
當web server收到/index.php這個請求后,會啟動對應的CGI程序,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執行環境,然后處理請求,再以規定CGI規定的格式返回處理后的結果,退出進程。web server再把結果返回給瀏覽器
(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的故障向操作系統的傳播

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM