Nginx與PHP之間的執行原理

2021-09-06 15:41:59 字數 3330 閱讀 3343

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程序。

我們編輯檔案如下圖:

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

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

原 PHP的執行流程,PHP擴充套件載入過程

宣告 本文為 斯人原創,全部為作者一一分析得之,有不對的地方望賜教。為了以後能夠明白的開發php擴充套件.就一定要了解php的執行順序.這篇文章就是為c開發php擴充套件做鋪墊.web環境 我們假設為 apache.在編譯php的時候,為了能夠讓apache支援php,我們會生成乙個mod php5...

Nginx與php fpm之間的關係

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