Nginx+PHP-FPM運行原理

CGI

common gateway interface (公共網關接口)

請求模式:
    Web Brower(瀏覽器) ----(經過http協議傳輸)----> Http Server(服務器nginx/apache) -----> CGI Program -----> Db

Server 與 CGI 經過 STDIN/STDOUT(標準的輸入/輸出)進行數據傳遞
nginx(動態加載模塊) apache(指定加載模塊)複製代碼

CGI工做原理

每當客戶請求CGI的時候,WEB服務器就請求操做系統生成一個新的CGI解釋器進程(如php-cgi.exe),
CGI 的一個進程則處理完一個請求後退出,下一個請求來時再建立新進程。
固然,這樣在訪問量不多沒有併發的狀況也行。但是當訪問量增大,併發存在,這種方式就不 適合了。因而就有了fastcgi。複製代碼

FastCGI

像是一個常駐(long-live)型的CGI,它能夠一直執行着,只要激活後,
不會每次都要花費時間去fork一次(這是CGI最爲人詬病的fork-and-execute 模式)。

通常狀況下,FastCGI的整個工做流程是這樣的:
    1.Web Server啓動時載入FastCGI進程管理器(IIS ISAPI或Apache Module)
    2.FastCGI進程管理器自身初始化,啓動多個CGI解釋器進程(可見多個php-cgi)並等待來自Web Server的鏈接。
    3.當客戶端請求到達Web Server時,FastCGI進程管理器選擇並鏈接到一個CGI解釋器。 Web server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi。
    4.FastCGI 子進程完成處理後將標準輸出和錯誤信息從同一鏈接返回Web Server。
      當FastCGI子進程關閉鏈接時, 請求便告處理完成。
      FastCGI子進程接着等待並處理來自FastCGI進程管理器(運行在Web Server中)的下一個鏈接。 
      在CGI模式中,php-cgi在此便退出了。複製代碼

php-fpm(PHP內置的一種fast-cgi)

php-fpm即php-Fastcgi Process Manager.
php-fpm是 FastCGI 的實現,並提供了進程管理的功能。
進程包含 master 進程和 worker 進程兩種進程。
master 進程只有一個,負責監聽端口,接收來自 Web Server 的請求,而 worker 進程則通常有多個(具體數量根據實際須要配置),
每一個進程內部都嵌入了一個 PHP 解釋器,是 PHP 代碼真正執行的地方。複製代碼

請求步驟

Web Brower(瀏覽器訪問) www.example.com
|
        |
   經過http協議傳輸  
|
        |
    http server
 (服務器nginx/apache)            
|
        |
     配置解析    
路由到 www.example.com/index.php
|
        |
加載 nginx 的 fast-cgi 模塊
|
        |
fast-cgi 監聽 127.0.0.1:9000 地址
經過 fast-cgi 協議將請求轉發給 php-fpm 處理
|
        |
請求到達 127.0.0.1:9000
|
        |
php-fpm 監聽 127.0.0.1:9000
可經過 php-fpm.conf 進行修改複製代碼


attachments-2020-06-IZobrFO75ee049b71276b.jpg

相關文章
相關標籤/搜索