PHP與Nginx之間的執行機制以及原理

2021-09-02 23:43:13 字數 3369 閱讀 9723

nginx是**人最早開發的webserver,現在已經風靡全球,相信大家並不陌生。php也通過二十多年的發展來到了7系列版本,更加關注效能。這對搭檔在最近這些年,叱吒風雲,基本上lnmp成了當下的標配。可是,你用了這麼多年的nginx+php的搭配,你真正知道他們之間是怎麼互動怎麼通訊的麼?

nginx是什麼

nginx ("engine x") 是乙個高效能的http和反向**伺服器,也是乙個imap/pop3/smtp伺服器。

php-fpm是什麼

1、cgi、fast-cgi協議

cgi的歷史

早期的webserver只處理html等靜態檔案,但是隨著技術的發展,出現了像php等動態語言。

webserver處理不了了,怎麼辦呢?那就交給php直譯器來處理吧!

交給php直譯器處理很好,但是,php直譯器如何與webserver進行通訊呢?

為了解決不同的語言直譯器(如php、python直譯器)與webserver的通訊,於是出現了cgi協議。只要你按照cgi協議去編寫程式,就能實現語言直譯器與webwerver的通訊。如php-cgi程式。

fast-cgi的改進

有了cgi協議,解決了php直譯器與webserver通訊的問題,webserver終於可以處理動態語言了。

但是,webserver每收到乙個請求,都會去fork乙個cgi程序,請求結束再kill掉這個程序。這樣有10000個請求,就需要fork、kill php-cgi程序10000次。

有沒有發現很浪費資源?

於是,出現了cgi的改良版本,fast-cgi。fast-cgi每次處理完請求後,不會kill掉這個程序,而是保留這個程序,使這個程序可以一次處理多個請求。這樣每次就不用重新fork乙個程序了,大大提高了效率。

2、php-fpm是什麼

php-fpm即php-fastcgi process manager.

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

程序包含 master 程序和 worker 程序兩種程序。

master 程序只有乙個,負責監聽埠,接收來自 web server 的請求,而 worker 程序則一般有多個(具體數量根據實際需要配置),每個程序內部都嵌入了乙個 php 直譯器,是 php **真正執行的地方。

我們知道nginx不只有處理http請求的功能,還能做反向**。

故nginx通過反向**功能將動態請求轉向後端php-fpm。

下面我們來配置乙個全新的nginx+php-fpm

進入nginx目錄下,編輯 nginx.conf檔案。

如圖,在nginx.conf最後一行,新增include檔案

進入上面include的路徑,新增乙個server.

下面我們解釋一下配置項的含義:

server    

#當請求**下php檔案的時候,反向**到php-fpm

location ~ \.php$

}

總而言之:當我們訪問www.example.com的時候,處理流程是這樣的:

www.example.com|

|

nginx

|

|

路由到www.example.com/index.php

|

|

載入nginx的fast-cgi模組

|

|

fast-cgi監聽127.0.0.1:9000位址

|

|

www.example.com/index.php請求到達127.0.0.1:9000

|

|

等待處理...

下面我們啟用php的php-fpm來處理這個請求

開啟php-fpm.conf檔案,我們看到如下配置:

即:php-fpm模組監聽127.0.0.1:9000埠,等待請求到來去處理。

nginx與php-fpm的結合,完整的流程是這樣的。

www.example.com|

|

nginx

|

|

路由到www.example.com/index.php

|

|

載入nginx的fast-cgi模組

|

|

fast-cgi監聽127.0.0.1:9000位址        .

|

|

www.example.com/index.php請求到達127.0.0.1:9000

|

|

php-fpm 監聽127.0.0.1:9000

|

|

php-fpm 接收到請求,啟用worker程序處理請求

|

|

php-fpm 處理完請求,返回給nginx

|

|

nginx將結果通過http返回給瀏覽器

啟動成功,我們檢視php-fpm程序

如上圖,有乙個master程序,3個worker程序。

我們編輯檔案如下圖:

Nginx與PHP之間的執行原理

nginx是 人最早開發的webserver,現在已經風靡全球,相信大家並不陌生。php也通過二十多年的發展來到了7系列版本,更加關注效能。這對搭檔在最近這些年,叱吒風雲,基本上lnmp成了當下的標配。可是,你用了這麼多年的nginx php的搭配,你真正知道他們之間是怎麼互動怎麼通訊的麼?ngin...

Nginx與php fpm之間的關係

在web開發中nginx和php fpm 下文簡稱fpm 之間的協同工作是進行動態網頁開發的關鍵。nginx web sever 擔任的是乙個內容分發者的角色,如果客戶端 瀏覽器 請求的是index.html檔案,即靜態檔案,nginx會去檔案系統中找到該檔案傳送給瀏覽器。當請求的是index.ph...

安裝Nginx與執行

上傳nginx到linux系統 安裝依賴環境 1 安裝gcc環境 yum install gcc c 2 安裝pcre庫,用於解析正規表示式 yum install y pcre pcre devel 3 zlib壓縮和解壓縮依賴,yum install y zlib zlib devel 4 ss...