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...