nginx是如何解析php檔案的(PHP FPM)

2021-10-03 16:59:14 字數 1837 閱讀 1113

我們先來了解下nginx,想要了解nginx我們先來看下面這兩個概念:

正向**翻牆訪問谷歌

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

而nginx就是乙個高效能的http和反向**伺服器,也是乙個imap/pop3/smtp伺服器

nginx解析php檔案實際上是通過乙個叫做 php-fpm 的工具來解析的,那麼我們下面來看下什麼是php-fpm

php-fpm:php-fastcgi process manager.php的fastcgi程序管理器

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

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

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

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

php-fpm是 fastcgi 的實現,並提供了程序管理的功能。

php-fpm程序包含 master 程序和 worker 程序兩種程序。

master 程序只有乙個,負責監聽埠,接收來自 web server 的請求

worker 程序則一般有多個(具體數量根據實際需要配置),每個程序內部都嵌入了乙個 php 直譯器,是 php **真正執行的地方。

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

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

開玩笑,咱們這次就了解了解,往↓看,

通過nginx定義我們知道,nginx不只有處理http請求的功能,還能做反向**,所以

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

2.nginx接受請求,判斷如果是php檔案

3.那麼載入fastcgi模組

4.通過fastcgi_pass**到127.0.0.1:9000埠

5.而我們的php-fpm正好監聽127.0.0.1:9000埠,也就接收到了請求

6.fpm的master主程序接收到請求後,會分配子程序去處理請求

7.子程序中包含php直譯器,解釋php檔案後,返回結果給nginx

8.nginx通過http協議響應給客戶端

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

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

通過上面這張,我們可以清晰的看到php-fpm的程序關係

如何解析rdb檔案

相信大家也都或多或少的了解些redis,知道他是記憶體性nosql資料庫。那麼,疑問也就來了,這種記憶體型資料庫的資料在伺服器宕機後,資料還會恢復嗎?答案是會恢復的!因為這種記憶體型資料庫也存在它的持久化機制,下面是redis的rdb 持久化觸發條件 其含義如下 900秒內如果至少有1個key的值變...

DNS是如何解析的?

dns domain name system,負責將使用者請求的網域名稱解析為對應機器的ip位址。眾所周知,網際網路上的每一台機器的身份是由ip位址標識的,而我們想要與任何一台機器進行通訊都必須知道它的ip位址,然而,由於ip位址對人類來說難於記憶,因此就產生了網域名稱。就拿www.baidu.co...

Spring 是如何解析 標籤的?

上回 spring ioc 容器初始化 2 說到了 spring 如何解析我們定義的 標籤,跟進了一層又一層,跋山涉水,最終來到了 beandefinitionparserdelegate parsebeandefinitionelement 方法。不過這個方法只是表面,並未深入解析 中的 clas...