中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

CGI、FastCGI和PHP-FPM之間的關系是什么

發布時間:2021-09-03 19:05:12 來源:億速云 閱讀:136 作者:chen 欄目:大數據

本篇內容介紹了“CGI、FastCGI和PHP-FPM之間的關系是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

在搭建 LAMP/LNMP 服務器時,會經常遇到 PHP-FPM、FastCGI和CGI 這幾個概念。如果對它們一知半解,很難搭建出高性能的服務器。接下來我們就以圖形方式,解釋這些概念之間的關系。

基礎

在整個網站架構中,Web Server(如Apache)只是內容的分發者。舉個栗子,如果客戶端請求的是 index.html,那么Web Server會去文件系統中找到這個文件,發送給瀏覽器,這里分發的是靜態數據。

CGI、FastCGI和PHP-FPM之間的關系是什么

如果請求的是 index.php,根據配置文件,Web Server知道這個不是靜態文件,需要去找 PHP 解析器來處理,那么他會把這個請求簡單處理,然后交給PHP解析器。

CGI、FastCGI和PHP-FPM之間的關系是什么

當Web Server收到 index.php 這個請求后,會啟動對應的 CGI 程序,這里就是PHP的解析器。接下來PHP解析器會解析php.ini文件,初始化執行環境,然后處理請求,再以規定CGI規定的格式返回處理后的結果,退出進程,Web server再把結果返回給瀏覽器。這就是一個完整的動態PHP Web訪問流程,接下來再引出這些概念,就好理解多了,

  • CGI:是 Web Server 與 Web Application 之間數據交換的一種協議。

  • FastCGI:同 CGI,是一種通信協議,但比 CGI 在效率上做了一些優化。同樣,SCGI 協議與 FastCGI 類似。

  • PHP-CGI:是 PHP (Web Application)對 Web Server 提供的 CGI 協議的接口程序。

  • PHP-FPM:是 PHP(Web Application)對 Web Server 提供的 FastCGI 協議的接口程序,額外還提供了相對智能一些任務管理。

WEB 中,

  • Web Server 一般指Apache、Nginx、IIS、Lighttpd、Tomcat等服務器,

  • Web Application 一般指PHP、Java、Asp.net等應用程序。

Module方式

在了解 CGI 之前,我們先了解一下Web server 傳遞數據的另外一種方法:PHP Module加載方式。以 Apache 為例,在PHP Module方式中,是不是在 Apache 的配置文件 httpd.conf 中加上這樣幾句:

# 加入以下2句
LoadModule php5_module D:/php/php5apache2_2.dll
AddType application/x-httpd-php .php

# 修改如下內容
<IfModule dir_module>
    DirectoryIndex index.php index.html
</IfModule>

上面是 Windows 下安裝php和apache環境后手動配置,在linux下源碼安裝大致是這樣配置的:

# ./configure --with-mysql=/usr/local --with-apache=/usr/local/apache --enable-track-vars

所以,這種方式,他們的共同本質都是用 LoadModule 來加載 php5_module,就是把php作為apache的一個子模塊來運行。當通過web訪問php文件時,apache就會調用php5_module來解析php代碼。

那么php5_module是怎么來將數據傳給php解析器來解析php代碼的呢?答案是通過sapi。

我們再來看一張圖,詳細的說說apache 與 php 與 sapi的關系:

CGI、FastCGI和PHP-FPM之間的關系是什么

從上面圖中,我們看出了sapi就是這樣的一個中間過程,SAPI提供了一個和外部通信的接口,有點類似于socket,使得PHP可以和其他應用進行交互數據(apache,nginx等)。php默認提供了很多種SAPI,常見的提供給apache和nginx的php5_module、CGI、FastCGI,給IIS的ISAPI,以及Shell的CLI。

所以,以上的apache調用php執行的過程如下:

apache -> httpd -> php5_module -> sapi -> php

好了。apache與php通過php5_module的方式就搞清楚了吧!

這種模式將php模塊安裝到apache中,所以每一次apache結束請求,都會產生一條進程,這個進程就完整的包括php的各種運算計算等操作。

在上圖中,我們很清晰的可以看到,apache每接收一個請求,都會產生一個進程來連接php通過sapi來完成請求,可想而知,如果一旦用戶過多,并發數過多,服務器就會承受不住了。

而且,把mod_php編進apache時,出問題時很難定位是php的問題還是apache的問題。

CGI

CGI(Common Gateway Interface)全稱是“通用網關接口”,WEB 服務器與PHP應用進行“交談”的一種工具,其程序須運行在網絡服務器上。CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變量。如php、perl、tcl等。

WEB服務器會傳哪些數據給PHP解析器呢?URL、查詢字符串、POST數據、HTTP header都會有。所以,CGI就是規定要傳哪些數據,以什么樣的格式傳遞給后方處理這個請求的協議。仔細想想,你在PHP代碼中使用的用戶從哪里來的。

也就是說,CGI就是專門用來和 web 服務器打交道的。web服務器收到用戶請求,就會把請求提交給cgi程序(如php-cgi),cgi程序根據請求提交的參數作應處理(解析php),然后輸出標準的html語句,返回給web服服務器,WEB服務器再返回給客戶端,這就是普通cgi的工作原理。

CGI的好處就是完全獨立于任何服務器,僅僅是做為中間分子。提供接口給apache和php。他們通過cgi搭線來完成數據傳遞。這樣做的好處了盡量減少2個的關聯,使他們2變得更獨立。

但是CGI有個蛋疼的地方,就是每一次web請求都會有啟動和退出過程,也就是最為人詬病的fork-and-execute模式,這樣一在大規模并發下,就死翹翹了。

FastCGI介紹

FastCGI簡單介紹

從根本上來說,FastCGI是用來提高CGI程序性能的。類似于CGI,FastCGI也可以說是一種協議

FastCGI像是一個常駐(long-live)型的CGI,它可以一直執行著,只要激活后,不會每次都要花費時間去fork一次。它還支持分布式的運算, 即 FastCGI 程序可以在網站服務器以外的主機上執行,并且接受來自其它網站服務器來的請求。

FastCGI是語言無關的、可伸縮架構的CGI開放擴展,其主要行為是將CGI解釋器進程保持在內存中,并因此獲得較高的性能。眾所周知,CGI解釋器的反復加載是CGI性能低下的主要原因,如果CGI解釋器保持在內存中,并接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail- Over特性等等。

FastCGI的工作原理

FastCGI接口方式采用C/S結構,可以將HTTP服務器和腳本解析服務器分開,同時在腳本解析服務器上啟動一個或者多個腳本解析守護進程。當HTTP服務器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然后將得到的結果返回給瀏覽器。這種方式可以讓HTTP服務器專一地處理靜態請求,或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。

CGI、FastCGI和PHP-FPM之間的關系是什么

“CGI、FastCGI和PHP-FPM之間的關系是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

五华县| 若尔盖县| 资讯| 福安市| 洱源县| 崇阳县| 多伦县| 温宿县| 磐石市| 益阳市| 东乡| 临澧县| 西和县| 渝中区| 湛江市| 方城县| 陵水| 陆良县| 广丰县| 磴口县| 柞水县| 红河县| 利辛县| 乐清市| 留坝县| 连州市| 上杭县| 奉节县| 巨野县| 禹城市| 通渭县| 微山县| 临高县| 长沙市| 禄丰县| 崇信县| 娄烦县| 驻马店市| 名山县| 昌邑市| 滁州市|