1. 程式人生 > >nginx和php-fpm的關係

nginx和php-fpm的關係

做一回認真的PHP工程師


正向代理 FQ訪問谷歌

對於人來說可以感知到,但伺服器感知不到,我們叫他正向代理伺服器。

 

反向代理 訪問百度 中間有個負載代理伺服器

對於人來說不可感知,但對於伺服器來說是可以感知的,我們叫他反向代理伺服器

 

而nginx就是一個高效能的http和反向代理伺服器,也是一個IMAP/POP3/SMTP伺服器

 

Php-fpm:php-Fastcgi Process Manager. PHP的FastCGI程序管理器

 

要想知道什麼是PHP-fpm,首先要知道什麼是fastcgi,更要知道什麼是cgi

 

Cgi 通用閘道器介面,Web 伺服器執行時外部程式(php,python)的規範

 

Web伺服器早期只處理html靜態檔案,當php等動態語言出現後處理不了,就需要使用各個動態語言的直譯器,那麼直譯器和web伺服器之間的通訊標準或者協議或者介面就是cgi。每次php檔案的訪問都會復刻出一個程序進行處理

 

Fastcgi 常駐型的cgi,只要啟用後,一直執行,不會每次都要花費時間去fork一次(這是CGI最為人詬病的fork-and-execute 模式)。

 

php-fpm是 FastCGI 的實現,並提供了程序管理的功能。
程序包含 master 程序和 worker 程序兩種程序。
master 程序只有一個,負責監聽埠,接收來自 Web Server 的請求,而 worker 程序則一般有多個(具體數量根據實際需要配置),每個程序內部都嵌入了一個 PHP 直譯器,是 PHP 程式碼真正執行的地方。

還有如果在PHP-FPM管理下的某個FastCGI程序掛了,PHP-FPM會根據使用者配置來看是否要重啟補全,PHP-FPM更像是管理器,而真正銜接Nginx與PHP的則是FastCGI程序

 

fastcgi_pass所配置的內容,便是告訴Nginx你接收到使用者請求以後,你該往哪裡轉發

 



 

 

 

那麼nginx和php-fpm到底是怎麼工作的呢。請聽下回分解。

 

 

 

 

 

上面通過nginx定義我們知道,Nginx不只有處理http請求的功能,還能做反向代理。

下面是我畫的一個簡單的流程圖

 

 

 

1. 客戶端通過http協議訪問網站域名

2. Nginx接受請求,並路由轉到index.php

3. 載入fastcgi模組

4. Fastcgi監聽127.0.0.1:9000地址

5. 然後訪問到達127.0.0.1:9000

6. php-fpm監聽127.0.0.1:9000,也就接收到了請求

7. Fpm的master主程序,分配子程序去處理請求

8. 處理完成後,返回結果給nginx

9. Nginx通過http協議響應給客戶端

 

 

Nginx負責承載HTTP請求的響應與返回,以及超時控制記錄日誌等HTTP相關的功能,而PHP則負責處理具體請求要做的業務邏輯,它們倆的這種合作模式也是常見的分層架構設計中的一種,在它們各有專注面的同時,FastCGI又很好的將兩塊銜接,保障上下游通訊互動

 

 

檢視fpm程序,可分為主程序和子程序

ps -ef | grep fpm