1. 程式人生 > >淺析CGI、FastCGI、PHP-FPM、PHP-CGI

淺析CGI、FastCGI、PHP-FPM、PHP-CGI

一、CGI(通用閘道器介面)

CGI 是Web 伺服器執行時外部程式的規範標準(一種協議),按CGI 編寫的程式可以擴充套件伺服器功能。

CGI應用程式是獨立於伺服器的,所以說幾乎所有伺服器都支援CGI,可用任何語言編寫實現CGI只要這種語言具有標準輸入、輸出和環境變數

CGI是外部應用程式(CGI程序)與WEB伺服器之間的介面標準,是在CGI程式和Web伺服器之間傳遞資訊的過程。

工作流程:我們說Internet把使用者請求送到web伺服器->web伺服器接收使用者請求並交給CGI程式處理->CGI程式 把處理結果傳送給web伺服器->web伺服器把結果送回到使用者。

舉個例子:

比如,使用者請求index.html,那麼web server會去檔案系統中找到這個檔案,傳送給瀏覽器,這裡分發的是靜態資料。如果現在請求的是index.php,根據配置檔案,nginx知道這個不是靜態檔案,需要去找PHP直譯器來處理,那麼他會把這個請求簡單處理後交給PHP直譯器。Nginx會傳哪些資料給PHP直譯器呢?url、查詢字串、POST資料、HTTP header等,那麼CGI就是規定要傳哪些資料、以什麼樣的格式傳遞給後方處理這個請求的協議。

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

二、FastCGI

CGI是第一個,可能仍然是得到最廣泛使用的伺服器擴充套件。它在伺服器和眾多的資源型別之間提供了一種簡單的、函式形式的粘合方式,用來處理各種需要的轉換。這個介面還能很好的保護伺服器,防止一些糟糕的擴充套件對它造成的破壞。但是CGI也存在著非常大的缺陷,就是每當使用CGI的伺服器接受得到一個請求都會開啟一個新的CGI程序進行處理(PHP中需要重新解析php.ini,重新載入全部擴充套件並且初始化全部資料結構),這對伺服器的效能有著極大的消耗。為了解決這個問題,就誕生了一種新型的CGI---FastCGI,FastCGI像是一個常駐型的CGI,是作為持久守護程序執行的,很好的解決了這個問題。

注:它還支援分散式的運算, 即 FastCGI 程式可以在網站伺服器以外的主機上執行並且接受來自其它網站伺服器來的請求。

其主要行為是:將CGI直譯器程序保持在記憶體中並因此獲得較高的效能。

工作原理:

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在此便退出了。

三、PHP-FPM、PHP-CGI

大家都知道,PHP的直譯器是PHP-CGI。PHP-CGI只是個CGI程式,他自己本身只能解析請求,返回結果,不會程序管理,所以就出現了一些能夠排程PHP-CGI程序的程式,PHP-FPM就是經過多年實驗和使用並被PHP官方收納的這樣的程式。

而PHP-fpm就是針對於PHP的,Fastcgi的一種實現,他負責管理一個程序池,來處理來自Web伺服器的請求。

資料來源:HTTP權威指南

               百度百科

               https://segmentfault.com/q/1010000000256516         

相關推薦

淺析CGIFastCGIPHP-FPMPHP-CGI

一、CGI(通用閘道器介面)CGI 是Web 伺服器執行時外部程式的規範標準(一種協議),按CGI 編寫的程式可以擴充套件伺服器功能。CGI應用程式是獨立於伺服器的,所以說幾乎所有伺服器都支援CGI,可

什麽是CGIFastCGIPHP-CGIPHP-FPMSpawn-FCGI?

風險 gin 加載 com 集成 客戶端請求 代碼 enable 直接 https://mp.weixin.qq.com/s/Co1LxS2h_ILh9syOmshjZg 什麽是CGI CGI全稱是“公共網關接口”(Common Gateway Interface),HTT

什麼是CGIFastCGIPHP-CGIPHP-FPMSpawn-FCGI

什麼是CGI   CGI全稱是“公共閘道器介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須執行在網路伺服器上。   CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如p

php-fpmcgifastcgi總結

Php-fpm是什麼 1、cgi、fast-cgi協議 cgi的歷史 早期的webserver只處理html等靜態檔案,但是隨著技術的發展,出現了像php等動態語言。  webserver處理不了了,怎麼辦呢?那就交給php直譯器來處理吧!  交給php直譯器處理很好,

nginxphp-fpmswoole HTTP/TCP壓測對比

本次測試是在win7下docker環境中進行壓測,共建立一個nginx容器、一個php-fpm容器和一個swoole容器,客戶端請求nginx伺服器,nginx接收使用者訪問請求並轉發給php-fpm,php-fpm接收資料併發送資料給swoole伺服器 均使用docker環境下進行ab壓測併發100,

linux檢視nginxapachephpphp-fpmmysql及配置項所在目錄

很多時候會登入一臺陌生的伺服器;當需要調整環境的時候;那真是起步啥都沒有;裝備全靠打;兩眼一抹黑到處找配置項;還好我這記的有一份筆記;可以先總結下;大都是先用 which 獲取目錄;然後再獲取配置項位置;which mysql /usr/bin/mysql /usr/bin

docker-compose安裝nginxphp-fpmmysql

開發十年,就只剩下這套架構體系了! >>>   

cgifastcgiPHP-FPMphp-cgi

cgi ------協議介面 每個進到伺服器的請求,cgi介面會對進行解析,比如一個PHP檔案請求來了,cgi會知道這個是PHP檔案,需要PHP進行執行,所以就啟動PHP解析器解析php.ini檔案和初始化PHP環境。當請求結束後,又會關閉PHP,當第二次有關PHP請求到來的時候重

php後端模式,php-fpm以及php-cgi, fast-cgi,以及與nginx的關系

編寫 configure RKE -c gin 回來 靜態 子進程 出現 關於cgi是什麽,fast-cgi是什麽,php-cgi是什麽,fast-cgi是什麽,下面這篇講的很清楚: https://segmentfault.com/q/1010000000256516

nginx/php-fpm 訪問php文件直接下載而不運行

fpm net 知識庫 rtc 運行 我們 腳本 pass ram 遇到這種問題,首先確認你web服務器配置中的.PHP是不是被指定給FastCGI server處理: location ~ .php$ { fastcgi_pass 127.0.0.1:9000;

php-fpmphp成為apache模塊好在哪

版本 分享圖片 use nmp 服務 esp range 概述 解釋器 php-fpm比php成為apache模塊好在哪 年華81kgPS61 | 瀏覽 1896 次 |舉報 我有更好的答案 推薦於2017-11-23 10:46:09 最佳答案

nginx+php-fpm模式php記憶體洩漏探究

之前遇到過一次伺服器記憶體告警,檢視後發現有個php-fpm程序佔用了2G的記憶體。但我明明在php.ini檔案裡面,有配置 memory_limit = 256M,那為什麼會有佔用2G記憶體的php-fpm程序呢? 這裡先簡單說一下nginx+php-fpm模式的工作原理。 

php-fpm.conf php.ini配置檔案_2018_lcf

[[email protected] ~]# cat /root/online/php-fpm.conf   ;;;;;;;;;;;;;;;;;;;;; ; FPM Configuration ; ;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;

使用Phalcon+PHP-FPM構建PHP基於多程序的資料庫連線池

之前看到網上有一篇文章說Phalcon和PHP沒有資料庫連線池,而swoole本身提供了很好的資料庫連線池。實際上這是一種誤解,PHP自身早就實現了持久化的資料庫連線。而Phalcon基於zephir寫的資料庫連線介面卡,必然也是支援PHP自身實現的這種資料

nginx/php-fpm 訪問php檔案直接下載而不執行

遇到這種問題,首先確認你web伺服器配置中的.php是不是被指定給FastCGI server處理:location ~ .php$ {fastcgi_pass 127.0.0.1:9000;}如已配置,那麼可能是由於fastcgi_script_name訪問指令碼路徑不正確

cgifastcgiphp-fpm分別是什麼

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

CGIFastCGIPHP-FPM區別和關係詳解(包含圖解)

CGI、FastCGI和PHP-FPM區別和關係詳解(包含圖解) 轉載至:https://www.awaimai.com/371.html 在搭建 LAMP/LNMP 伺服器時,會經常遇到 PHP-FPM、FastCGI和CGI 這幾個概念。如果對它們一知半解,很難搭建出高效能的伺服器。

cgifastcgiphp-cgiphp-fpm的關係

1. CGI CGI全稱是“公共閘道器介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式須執行在網路伺服器上。 CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,perl,tcl等。 伺服器接收

關於CGIFASTCGIPHP-CGIPHP-FPM

因為想了解PHP的執行原理,所以瞭解到需要知道這幾個比較陌生的東西,在網上搜到很多,總說紛紜,大致做了一些總結,方便理解。 說明:以下web server以nginx為例,語言以php為例 1,CGI CGI(Common Gateway Interface)公

CGIFastCGIPHP-FPM的關係

在搭建 LAMP/LNMP 伺服器時,會經常遇到 PHP-FPM、FastCGI和CGI 這幾個概念。如果對它們一知半解,很難搭建出高效能的伺服器。接下來我們就以圖形方式,解釋這些概念之間的關係。 基礎 在整個網站架構中,Web Server(如Apache)只是內容