Nginx解析PHP的原理 | CGI、FastCGI及php-fpm的關係

Nginx解析PHP的原理,CGI/FastCGI以及PHP-Fpm的關係.

一、PHP+Nginx應運而生的場景.
隨着互聯網的發展,用戶對此接受面廣,數據流的增大使得Web端的運行承載壓力日益增大,野蠻生長在大數據時代裏的WEB語言PHP也找到了比老搭檔更優越的活力搭檔Nginx,說到Nginx咱就一起嘮一嘮這其中的奧妙.

從以下幾個維度來剖析一下Nginx的活力所在,當然是和解析PHP的老搭檔APACHE相比而言.

  1. 性能
    1.1 資源佔有率少,節省內存資源
    1.2 非阻塞式的請求處理機制給之增加了強勁動力,這也是爲什麼能在高迸發折騰下保持金槍不倒之勢. 哈哈~
    1.3 有很多資料千篇一律說性能比Apache提升了3倍,這塊不敢苟同。
  2. 延展性
    2.1 高內聚的模塊化設計,簡介的模塊編寫,使得產品更具魅力和活力
    2.2 有活躍的技術社區和技術羣體,便於技術的支持度.
  3. 量級和可用性
    3.1 輕量級
    3.2 解析靜態頁面遠比解析動態頁面性能好.
    3.3 配置更簡潔友好,戒掉了臃腫. 美中不足的是URL重寫還待加強.
    3.4 新興意味着有穩定性的挑戰和GUG的伴隨,當然不必擔憂,有前人鋪路呢.

二、什麼是CGI、什麼是FastCGI,什麼是PHP-Fpm,什麼是PHP-cgi

CGI :是一個可伸縮地、高速地在HTTP server和動態腳本語言間通信的接口
FastCGI : 是CGI的fast版本(哈哈,急速版)多數流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,這一帶Fast可了不得了:
1.性能提升.他老爹處理請求時遇到動態腳本解析器。
2.升級附帶了支持高迸發性
3.安全上做了升級
說道性能提升了,肯定有性能提升之道,那提升的原理是啥呢?
1.1 接口處理方式採用了 C/S 結構. 在處理機制上就使得HTTP服務和腳本解析器剝離開來,使得部署變得可分離,這樣腳本解析服務器可以分出來多個守護進程,遇到動態腳本則分發給FastCIG,將得到結果反給瀏覽器。HTTP服務器呢則一心一意的幹靜態資源解析方面的活。這就相當於是多線程的概念啦,當然會快呀。
PHP-Fpm : 這個就是咱們上面提到的腳本解析守護進程.
PHP-Cgi : 是PHP自帶的FastCGI管理器。

三、Nginx如何解析PHP
Nginx 是沒法解析動態腳本的,下面看一張原理解析圖片,說白了Nginx解析php是通過fast-cig + php-fpm配合完成的.
140224291.png
用戶通過瀏覽器訪問PHP頁面時候,流程是首先請求到了Nginx服務器,服務器發現是動態請求,Nginx通過Fast-cgi接口來跟動態腳本PHP通信,Fast-cig在Linux下是socket(文件或者Ip類型),通信過程中由FastCGI的wrapper(wrapper可理解爲用於啓動另外一個線程的程序)進而啓動一個CIG的解析器.Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi
FastCGI子進程完成處理後將標準輸出和錯誤信息從同一連接返回Web Server再返回給用戶。當FastCGI子進程關閉連接時,請求便告處理完成。FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個連接。 在CGI模式中,php-cgi在此便退出了,在php-cgi啓動的過程中,會有守護者或者說管理者(PHP-fpm),防止php-cgi的崩潰.
這樣整流程也算完成了.

轉載http://www.bravedu.com/archives/12.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章