FastCGI和php fpm的區別

2021-08-15 22:55:56 字數 2114 閱讀 5500

一直以來對cgi、php-cgi和php-fpm的概念都比較模糊,今天整理了一下:

1、cgi是什麼?

cgi是個協議,跟程序什麼的沒關係。

web server(比如說 nginx)只是內容的分發者。

比如, 1)如果請求的是/*.html靜態資料,那麼web server會去檔案系統中找到這個檔案,傳送給瀏覽器。

2)如果請求的是/*.php動態資料,nginx根據配置檔案,需要去找php解析器來處理,那麼他會把這個請求簡單處理後交給php解析器。

nginx會傳哪些資料給php解析器呢?url、查詢字串、post資料、http header都會有。所以,cgi就是規定要傳哪些資料、以什麼樣的格式傳遞給後方處理這個請求的協議。

當web server收到/*.php這個請求後,會啟動對應的cgi程式,這裡就是php的解析器。接下來php解析器會解析php.ini檔案,初始化執行環境,然後處理請求,再以規定cgi規定的格式返回處理後的結果,退出程序。web server再把結果返回給瀏覽器。

2、fastcgi是什麼?

從根本上來說,fastcgi是用來提高cgi程式效能的。類似於cgi,fastcgi也可以說是一種協議。

fastcgi像是乙個常駐(long-live)型的cgi,它可以一直執行著,只要啟用後,不會每次都要花費時間去fork一次(這是cgi最為人詬病的fork-and-execute 模式)。它還支援分布式的運算, 即 fastcgi 程式可以在**伺服器以外的主機上執行並且接受來自其它**伺服器來的請求。

fastcgi是語言無關的、可伸縮架構的cgi開放擴充套件,其主要行為是將cgi直譯器程序保持在記憶體中並因此獲得較高的效能。

fastcgi的工作原理

1) web server啟動時載入fastcgi程序管理器(iis isapi或apache module)

2) fastcgi程序管理器自身初始化,啟動多個cgi直譯器程序(可見多個php-cgi)並等待來自web server的連線。

3) 當客戶端請求到達web server時,fastcgi程序管理器選擇並連線到乙個cgi直譯器。web server將cgi環境變數和標準輸入傳送到fastcgi子程序php-cgi。

4) fastcgi子程序完成處理後將標準輸出和錯誤資訊從同一連線返回web server。當fastcgi子程序關閉連線時,請求便告處理完成。fastcgi子程序接著等待並處理來自fastcgi程序管理器(執行在web server中)的下乙個連線。 在cgi模式中,php-cgi在此便退出了。

在上述情況中,你可以想象cgi通常有多慢。每乙個web請求php都必須重新解析php.ini、重新載入全部擴充套件並重初始化全部資料結構。使用fastcgi,所有這些都只在程序啟動時發生一次。乙個額外的 好處是,持續資料庫連線(persistent database connection)可以工作。

3、php-cgi是什麼?

php-cgi是 php的直譯器,它只是個 cgi 程式,只能解析請求,返回結果,不會程序管理。

4、php-fpm是什麼?

php-fpm是fastcgi 程序管理器,對於fastcgi協議的具體實現,他負責管理乙個程序池,來處理來自web伺服器的請求。目前,php5.3版本之後,php-fpm是內置於php的。

php-fpm的啟動:

/usr/local/php/sbin/php-fpm

php-fpm的關閉:

pkill php-fpm

或kill -int `cat /usr/local/php/var/run/php-fpm.pid`

php-fpm的重啟:

kill -usr2 `cat /usr/local/php/var/run/php-fpm/pid`

檢視php-fpm是否啟動成功:

netstat -tunpl | grep 90001

或ps aux | gerp php-fpm

開機啟動php-fpm:

開啟/ect/rc.local加入/usr/local/php/sbin/php-fpm

訊號:int、term 立刻終止

quit 平滑終止

usr1 重新開啟日誌檔案

usr2 平滑過載所有worker程序並重新載入篇日誌和二進位制模組

Fastcgi和php fpm的關係

抽象化的說明fastcgi和php fpm的關係 你 php 去和日本人 web伺服器,如 apache nginx 談生意 你說中文 php 他說日語 c 互相聽不懂,怎麼辦?那就都把各自說的話轉換成英語 fastcgi 協議 吧。怎麼轉換呢?你就要使用乙個翻譯機 php fpm 當然對方也有乙個...

fastcgi與php fpm的關係

剛開始對這個問題我也挺糾結的,看了 http權威指南 後,感覺清晰了不少。首先,cgi是幹嘛的?cgi是為了保證web server傳遞過來的資料是標準格式的,方便cgi程式的編寫者。web server 比如說nginx 只是內容的分發者。比如,如果請求 index.html,那麼web serv...

FastCgi與PHP fpm之間的關係

我在網上查fastcgi與php fpm的關係,查了快一周了,基本看了個遍,真是眾說紛紜,沒乙個權威性的定義。網上有的說,fastcgi是乙個協議,php fpm實現了這個協議 有的說,php fpm是fastcgi程序的管理器,用來管理fastcgi程序的 有的說,php fpm是php核心的乙個...