摘要:其主要行為是將解釋器進程保持在內存中并因此獲得較高的性能。當子進程關閉連接時,請求便處理完成。
關于factcgi和cgi的學習
1、FastCGI是什么?
首先我們看下CGI,CGI全稱為通用網關接口 Common Cateway Interface.用于HTTP服務上的程序服務通信交流的一種工具,可以讓一個客戶端,從網頁瀏覽器向執行在網絡服務器上的程序請求數據。CGI描述了服務器和請求處理程序之間傳輸數據的一種標準。 CGI程序必須運行在網絡服務器上。常見的如php-cgi.exe。是php支持CGI標準的執行檔。
CGI的工作原理:每當客戶請求CGI的時候,WEB服務器就請求操作系統生成一個新的解釋器進程(如php-cgi.exe),當CGI進程完成當前任務結束后,web服務器就會殺死這個進程。
但是CGI接口方式性能較差,由于每次HTTP服務器遇到動態程序都需要重啟解析器來執行解析,拿php舉例,每一個web請求,php都必須重新解析php.ini、重新載入全部dll擴展并重新初始化全部數據結構,你可以想象這樣多慢。這在處理高并發的問題時,幾乎是不可能的。因此誕生了FastCGI.
所以,CGI解釋器的反復加載是CGI性能低下的主要原因,如果CGI解釋器保持在內存中并接受FastCGI進程管理器調度,則可以提供良好的性能、伸縮性、Fail-Over特性等等。
FastCGI:是一個可伸縮、高速的在web server和腳步語言間通訊的接口。其主要行為是將CGI解釋器進程保持在內存中并因此獲得較高的性能。
2、FastCGI在web服務器(Nginx)中的工作原理。
(1)、web Sever 啟動時載入FastCGI進程管理器,如php的FastCGI進程管理器是PHP-FPM(php-FastCGI Process Manger).
(2)、FastCGI進程管理器自身初始化,啟動多個CGI解釋器進程(在任務管理器中可見多個php-cgi.exe)并等待來自web服務器的連接。啟動php-cgi FastCGI進程時,可以配置以TCP協議或socker兩種方式啟動。
(3)、當客戶端請求到達Web Server時,Web Server將請求采用TCP協議或socket方式轉發到FastCGI主進程,FastCGI主進程選擇并連接到一個CGI解釋器(子進程php-cgi.exe)。Web Server將CGI環境變量和標準輸入發送到FastCGI子進程php-cgi.exe.
(4)、FastCGI子進程php-cgi.exe完成處理后將標準輸出和錯誤信息從原來的連接原路返回給web server。當FastCGI子進程關閉連接時,請求便處理完成。但是如果在傳統的CGI接口中,此時php-cgi子進程便在此退出了。
下圖所示的是Nginx+FastCGI的運作過程,腳本程序語言是php.
3、FastCGI的優點
(1)、php腳本運行速度更快,php解釋程序被載入內存而不是每次需要時從存儲器讀取,極大提升了依靠腳本運行站點的性能。
(2)、需要使用的系統資源更少,由于服務器不用每次在需要時都載入php解釋程序,你可以將站點的傳輸速度提升很多而不必增加cpu負擔。
(3)、可以把動態語言和HTTP服務器分離開來,同時在腳本解析服務器上啟動一個或者多個腳本解析守護進程。多數流行的HTTP服務器都支持FastCGI包括Apache/Nginx/lighttpd等。
(4)、當HTTP服務器每次遇到動態程序時,可以將其直接交付給FastCGI進程來執行,然后將得到的結果返回給瀏覽器。這種方式可以讓HTTP服務器專一地處理靜態請求或者將動態腳本服務器的結果返回給客戶端,這在很大程度上提高了整個應用系統的性能。
用戶瀏覽器發起對網頁的訪問:http://192.168.1.103/index.php
用戶和nginx服務器進行三次握手進行TCP連接(還包括nginx訪問控制策略、nginx防火墻等訪問控制策略)
第一步:nginx接收到來自服務器的http請求。
第二步:nginx會根據用戶訪問的URL和后綴對請求進行判斷。
(1)、例如客戶端訪問的index.php,nginx則會根據配置文件中的location進行匹配。
例如:
server { listen 8054; location ~ .php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } #error_page 404 /404.html; # redirect server error pages to the static page /50x.html # error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } }
用戶訪問的是index.php,則會匹配到location ~.php$,這個的含義是對用戶通過url訪問的資源進行區分大小的匹配,并且訪問的資源是以.php結尾的。
這里的 fastcgi_pass 127.0.0.1:9000,表示nginx通過fastcgi的接口將http請求發給127.0.0.1:9000進行處理,這個過程就是上面fastcgi運行原理中的第三部。這里的php腳本解析服務和nginx放在同一個服務器上面。 這里我用的是php返回動態的資源,所以這里的FastCGI進程管理器用的是php-fpm。
(2)、fastcgi_pass將動態資源交給php-fpm后,php-fpm會講資源轉給php腳本解析服務器的wrapper.
(3)、wrapper收到php-fpm轉過來的請求后,wrapper會生成一個新的線程調用php動態程序處理腳本并讀取返回數據;比如讀取mysql數據庫,會觸發讀庫操作。
(4)、php會將查詢處理得到的結果返回給wrapper,一直返回到nginx。最后Nginx將返回的數據發送給客戶端。
參考連接:
https://blog.csdn.net/m136663...
https://blog.csdn.net/riuhaze...
https://www.cnblogs.com/lidab...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/29364.html
摘要:其主要行為是將解釋器進程保持在內存中并因此獲得較高的性能。當子進程關閉連接時,請求便處理完成。 關于factcgi和cgi的學習 1、FastCGI是什么? 首先我們看下CGI,CGI全稱為通用網關接口 Common Cateway Interface.用于HTTP服務上的程序服務通信交流的一種工具,可以讓一個客戶端,從網頁瀏覽器向執行在網絡服務器上的程序請求數據。CGI描述了服務器...
摘要:接下來會對其中五個比較常見的運行模式進行說明。模式是目前主流的服務運行模式,擁有高效可靠的性能,推薦大家使用。由于微軟的排他性,只能運行于環境。 SAPI 這里所說的 PHP 運行模式, 其實指的是 SAPI (Server Application Programming Interface,服務端應用編程端口 )。SAPI 為 PHP 提供了一個和外部通信的接口, PHP 就是通過這...
摘要:原文開發之介紹和環境搭建由于需要做一些簡單的基于的開發,開始學習和調研,本篇介紹和的概念以及基于官方的,以及搭建起簡單的開發環境,以作備忘。所以程序其實沒有語言限制,只要能夠讀取環境變量,讀寫標準輸入輸出即可。管理器有多種形式。 原文:FastCGI+lighttpd開發之介紹和環境搭建 由于需要做一些簡單的基于FastCGI的Web開發,開始學習和調研,本篇介紹CGI和FastCGI...
閱讀 2639·2021-11-22 15:24
閱讀 1370·2021-11-17 09:38
閱讀 2746·2021-10-09 09:57
閱讀 1192·2019-08-30 15:44
閱讀 2438·2019-08-30 14:00
閱讀 3538·2019-08-30 11:26
閱讀 2935·2019-08-29 16:28
閱讀 746·2019-08-29 13:56