搜尋
首頁後端開發php教程PHP-FPM與Nginx的通訊機制的介紹(附範例)

本篇文章帶給大家的內容是關於PHP-FPM與Nginx的通訊機制的介紹(附範例),有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

PHP-FPM 介紹

  • CGI 協定與FastCGI 協定

每種動態語言( PHP,Python 等)的程式碼檔案需要透過對應的解析器才能被伺服器識別,而CGI 協定就是用來讓解釋器與伺服器可以互相通訊。 PHP 檔案在伺服器上的解析需要用到 PHP 解釋器,再加上對應的 CGI 協議,讓伺服器可以解析到 PHP 檔案。

由於CGI 的機制是每處理一個請求需要fork 一個CGI 進程,請求結束再kill掉這個進程,在實際應用上比較浪費資源,於是就出現了CGI 的改良版本FastCGI,FastCGI 在請求處理完後,不會kill 掉進程,而是繼續處理多個請求,這樣就大大提高了效率。

  • PHP-FPM 是什麼

PHP-FPM 即PHP-FastCGI Process Manager, 它是FastCGI 的實現,並提供了進程管理的功能。進程包含master 進程和worker 進程兩種;master 進程只有一個,負責監聽端口,接收來自伺服器的請求,而worker 進程則一般有多個(具體數量根據實際需要進行配置),每個進程內部都會嵌入一個PHP 解譯器,是程式碼真正執行的地方。

Nginx 與php-fpm 通訊機制

當我們造訪一個網站(如www.test.com)的時候,處理流程是這樣的:

  www.test.com
        |
        |
      Nginx
        |
        |
路由到www.test.com/index.php
        |
        |
加载nginx的fast-cgi模块
        |
        |
fast-cgi监听127.0.0.1:9000地址
        |
        |
www.test.com/index.php请求到达127.0.0.1:9000
        |
        |
     等待处理...
  • Nginx 與php-fpm 結合

在Linux 上,Nginx 與php-fpm 的通訊有tcp 和unix socket 兩種方式。

tcp 的優點是可以跨伺服器,當 Nginx 和 PHP-fpm 不在同一台機器上時,只能使用這種方式。

Unix socket 又叫IPC(inter-process communication 進程間通信) socket,用於實現同一主機上的進程間通信,這種方式需要在nginx設定檔中填寫php-fpm 的socket 檔案位置。

兩種方式的資料傳輸過程如下圖所示:

PHP-FPM與Nginx的通訊機制的介紹(附範例)

#二者的不同:

由於Unix socket不需要經過網路協定棧,不需要打包拆包、計算校驗和、維護序號和應答等,只是將應用層資料從一個進程拷貝到另一個進程。所以其效率比 tcp 的方式要高,可減少不必要的 tcp 開銷。不過,Unix socket 高並發時不穩定,連接數爆發時,會產生大量的長時緩存,在沒有面向連接協議的支撐下,大數據包可能會直接出錯不返回異常。而 tcp 這樣的面向連接的協議,可以更好的保證通訊的正確性和完整性。

Nginx 與php-fpm 結合只需要在各自的設定檔中做設定即可:

1) Nginx 中的設定

以tcp 通訊為例

server {
    listen       80; #监听80端口,接收http请求
    server_name  www.test.com; #就是网站地址
    root /usr/local/etc/nginx/www/huxintong_admin; # 准备存放代码工程的路径
    #路由到网站根目录www.test.com时候的处理
    location / {
        index index.php; #跳转到www.test.com/index.php
        autoindex on;
    }   

    #当请求网站下php文件的时候,反向代理到php-fpm
    location ~ \.php$ {
        include /usr/local/etc/nginx/fastcgi.conf; #加载nginx的fastcgi模块
        fastcgi_intercept_errors on;
        fastcgi_pass   127.0.0.1:9000; # tcp 方式,PHP-fpm 监听的IP地址和端口
       # fasrcgi_pass /usr/run/php-fpm.sock # unix socket 连接方式
    }

}

2) php-fpm 的設定

listen = 127.0.0.1:9000
# 或者下面这样
listen = /var/run/php-fpm.sock
注意,在使用Unix socket 方式連接時,由於socket 文件本質上是一個文件,存在權限控制的問題,所以需要注意Nginx 進程的權限與php-fpm 的權限問題,不然會提示無權限存取。 (在各自的設定檔裡設定使用者)

透過以上設定即可完成 php-fpm 與 Nginx 的通訊。

#

以上是PHP-FPM與Nginx的通訊機制的介紹(附範例)的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:segmentfault。如有侵權,請聯絡admin@php.cn刪除
PHP和Python:解釋了不同的範例PHP和Python:解釋了不同的範例Apr 18, 2025 am 12:26 AM

PHP主要是過程式編程,但也支持面向對象編程(OOP);Python支持多種範式,包括OOP、函數式和過程式編程。 PHP適合web開發,Python適用於多種應用,如數據分析和機器學習。

PHP和Python:深入了解他們的歷史PHP和Python:深入了解他們的歷史Apr 18, 2025 am 12:25 AM

PHP起源於1994年,由RasmusLerdorf開發,最初用於跟踪網站訪問者,逐漸演變為服務器端腳本語言,廣泛應用於網頁開發。 Python由GuidovanRossum於1980年代末開發,1991年首次發布,強調代碼可讀性和簡潔性,適用於科學計算、數據分析等領域。

在PHP和Python之間進行選擇:指南在PHP和Python之間進行選擇:指南Apr 18, 2025 am 12:24 AM

PHP適合網頁開發和快速原型開發,Python適用於數據科學和機器學習。 1.PHP用於動態網頁開發,語法簡單,適合快速開發。 2.Python語法簡潔,適用於多領域,庫生態系統強大。

PHP和框架:現代化語言PHP和框架:現代化語言Apr 18, 2025 am 12:14 AM

PHP在現代化進程中仍然重要,因為它支持大量網站和應用,並通過框架適應開發需求。 1.PHP7提升了性能並引入了新功能。 2.現代框架如Laravel、Symfony和CodeIgniter簡化開發,提高代碼質量。 3.性能優化和最佳實踐進一步提升應用效率。

PHP的影響:網絡開發及以後PHP的影響:網絡開發及以後Apr 18, 2025 am 12:10 AM

PHPhassignificantlyimpactedwebdevelopmentandextendsbeyondit.1)ItpowersmajorplatformslikeWordPressandexcelsindatabaseinteractions.2)PHP'sadaptabilityallowsittoscaleforlargeapplicationsusingframeworkslikeLaravel.3)Beyondweb,PHPisusedincommand-linescrip

PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?PHP類型提示如何起作用,包括標量類型,返回類型,聯合類型和無效類型?Apr 17, 2025 am 12:25 AM

PHP類型提示提升代碼質量和可讀性。 1)標量類型提示:自PHP7.0起,允許在函數參數中指定基本數據類型,如int、float等。 2)返回類型提示:確保函數返回值類型的一致性。 3)聯合類型提示:自PHP8.0起,允許在函數參數或返回值中指定多個類型。 4)可空類型提示:允許包含null值,處理可能返回空值的函數。

PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?PHP如何處理對象克隆(克隆關鍵字)和__clone魔法方法?Apr 17, 2025 am 12:24 AM

PHP中使用clone關鍵字創建對象副本,並通過\_\_clone魔法方法定制克隆行為。 1.使用clone關鍵字進行淺拷貝,克隆對象的屬性但不克隆對象屬性內的對象。 2.通過\_\_clone方法可以深拷貝嵌套對象,避免淺拷貝問題。 3.注意避免克隆中的循環引用和性能問題,優化克隆操作以提高效率。

PHP與Python:用例和應用程序PHP與Python:用例和應用程序Apr 17, 2025 am 12:23 AM

PHP適用於Web開發和內容管理系統,Python適合數據科學、機器學習和自動化腳本。 1.PHP在構建快速、可擴展的網站和應用程序方面表現出色,常用於WordPress等CMS。 2.Python在數據科學和機器學習領域表現卓越,擁有豐富的庫如NumPy和TensorFlow。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
1 個月前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
1 個月前By尊渡假赌尊渡假赌尊渡假赌
威爾R.E.P.O.有交叉遊戲嗎?
1 個月前By尊渡假赌尊渡假赌尊渡假赌

熱工具

WebStorm Mac版

WebStorm Mac版

好用的JavaScript開發工具

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

Atom編輯器mac版下載

Atom編輯器mac版下載

最受歡迎的的開源編輯器

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。