fastcgi原理理解以及配置(linux + php-fpm)
CGI全稱是“公共閘道器介面”(Common Gateway Interface),HTTP伺服器與你的或其它機器上的程式進行“交談”的一種工具,其程式一般執行在網路伺服器上。 CGI可以用任何一種語言編寫,只要這種語言具有標準輸入、輸出和環境變數。如php,perl,tcl等。fastcgi 可以認為是CGI的一種升級版。fastcgi 本質上可以看作是一種協議或者底層技術。 注意,在配置nginx動態頁面解析時,php-fpm可以看作是利用fastcgi的一種服務或者具體程序名字!
工作原理:
1、Web Server啟動時載入FastCGI程序管理器
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在此便退出了。
Nginx+Fastcgi 工作流程:
當Web Server收到 index.php 這個請求後,會啟動對應的 CGI 程式,這裡就是PHP的解析器。接下來PHP解析器會解析php.ini檔案,初始化執行環境,然後處理請求,再以規定CGI規定的格式返回處理後的結果,退出程序,Web server再把結果返回給瀏覽器。這就是一個完整的動態PHP Web訪問流程。本段摘自:https://www.php.cn/php-weizijiaocheng-392861.html
Fastcgi 技術目前支援的語言有:
php,perl,C/C++, Java, Python, Ruby 等
Fastcgi的缺點:
消耗記憶體
因為是多程序,所以程序消耗更多的伺服器記憶體,php-cgi直譯器每個程序消耗7M-25M記憶體,將這個數字乘以50到100就是很大的記憶體數
nginx+PHP(Fastcgi)伺服器在3萬併發連線下:
開10個程序消耗150M記憶體
開64個php-cgi程序消耗1280M記憶體
配置FastCGI: