FastCGI怎麼安裝PHP

2022-01-21 13:00:21

FastCGI安裝PHP的方法:1、下載php和php-fpm包;2、設定安裝環境;3、編譯安裝php和php-fpm;4、通過「/usr/local/php/sbin/php-fpm start」啟動FastCGI程序即可。

本文操作環境:Windows7系統、PHP7.1版、DELL G3電腦

FastCGI怎麼安裝PHP?Nginx與PHP(FastCGI)的安裝、設定和優化

什麼是FastCGI

FastCGI是一種可伸縮的、高速的在HTTP server和動態指令碼語言間通訊的介面。FastCGI也被眾多指令碼語言支援,包括PHP。

FastCGI是從CGI發展而來的。FastCGI介面方式採用C/S結構,可以將HTTP伺服器和指令碼解析伺服器分離開,同時在指令碼解析伺服器上啟動一個或多個指令碼解析守護行程。

當HTTP伺服器每次遇到動態城區時,直接交付給FastCGI程序執行,然後返回結果給瀏覽器,提高了系統的整體效能。


Nginx+FastCGI執行原理

Nginx並不支援對外部程式的直接呼叫或解析,所有外部程式都要通過FastCGI介面來呼叫。為了呼叫CGI程式,還需要一個FastCGI的wrapper,可以理解為用於啟動另一個程式的程式。

這個wrapper繫結在某個固定的socket上,如埠或檔案socket。當Nginx將CGI請求傳送給socket時,通過FastCGI介面,wrapper接收到請求,派生一個新的執行緒,此執行緒呼叫直譯器或外部程式處理指令碼並讀取返回資料,接著wrapper將返回資料通過FastCGI介面傳給Nginx,最後Nginx再返回給使用者端。


spawn-fcgi與PHP-FPM

FastCGI介面在指令碼解析伺服器上啟動一個或多個守護行程動態解析指令碼,這也成為FastCGI程序管理器,spawn-fcgi與PHP-FPM就是兩個程序管理器。

spawn-fcgi:是HTTP伺服器lighttpd的一部分,目前已是獨立成為一個專案,一般與lighttpd配合使用來支援PHP。但是spawn-fcgi在高並行的時候會出現記憶體漏失甚至自動重新啟動FastCGI。

PHP-FPM:第三方的FastCGI程序管理器,它是作為PHP的一個修補程式來開發的。在安裝過程中也需要和PHP原始碼一起編譯,也就是說PHP-FPM被編譯到PHP核心,因此效能方面更加優秀。同時其處理高並行方面能力也好很多。

因為FastCGI的優點是把動態語言和HTTP server分離開,所以Nginx與PHP/PHP-FPM經常被部署到不通的伺服器上,以分擔Nginx前端的壓力,使Nginx專注處理靜態請求,PHP/PHP-FPM解析PHP動態請求。


PHP與PHP-FPM安裝與優化

下載安裝包

下載php包:www.php.net,這裡使用php-5.2.13.tar.gz

下載php-fpm包:php-fpm.org,這裡使用php-5.2.13-fpm-0.5.13.diff.gz

注意:最好php和php-fpm版本一致,否則可能會出現相容性問題。

設定安裝環境

需要的依賴包包括:

gcc gcc-c++ libxml2 libxml2-devel autoconf libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel等

根據系統版本的不同,可能依賴的包也不同。

編譯安裝php和php-fpm

解壓縮php的原始碼包並將php-fpm當做修補程式打入php原始碼中。

tar zxf php-5.2.13.tar.gzgzip -cd php-5.2.13-fpm-0.5.13.diff.gz | patch -d php-5.2.13 -p1

編譯安裝,同時啟動對FastCGI的支援,啟用對FastCGI模式的fpm的支援。

cd php-5.2.13./configure --prefix=/usr/local/php --enable-fastcgi --enable-fpmmake && make install
cp php-ini-dist /usr/local/php/lib/php.ini

設定與優化php-fpm

php的主組態檔為php.ini;

php-fpm的主組態檔為php-fpm.conf,位於/usr/local/php/etc/下,是一個xml格式的檔案,下面介紹幾個常用的標籤:

<value name="listen_address">127.0.0.1:9000</value>:表示設定FastCGI程序監聽的IP地址和埠,預設為原生的9000;
<value name="display_errors">0</value>:表示是否顯示php錯誤資訊,預設為0表示不顯示,設定為1表示顯示錯誤資訊;
<value name="user">nobody</value>:表示設定執行FastCGI程序的使用者,需要和nginx組態檔中的使用者一致;
<value name="group">nobody</value>:表示設定執行FastCGI程序的使用者組,需要和nginx組態檔中的使用者組一致;
<value name="max_children">5</value>:設定FastCGI的程序數,官方建議小於2G記憶體,可以只開啟64個程序;4G以上可以開啟200個程序;
<value name="request_terminate_timeout">0s</value>:設定FastCGI執行指令碼的時間,預設0s,意味著無限執行下去;
<value name="rlimit_files">1024</value>:設定php-fpm開啟檔案描述符的限制,預設1024,這個值最好要和核心開啟的檔案數一致;
<value name="max_requests">500</value>:設定每一個程序最多處理多少個請求後會被關閉,預設500;
<value name="allowed_clients">127.0.0.1</value>:設定允許存取FastCGI程序解析器的IP地址,如果不設定IP地址,則無法接受nginx傳來的php解析請求;

管理FastCGI程序

啟動FastCGI程序的方法如下:

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

引數的含義如下:

start:啟動php的fastcgi程序;
stop:強制停止php的fastcgi程序;
quit:平滑終止php的fastcgi程序;
restart:重新啟動php的fastcgi程序;
reload:重新載入php的fastcgi程序,使程序不中斷地載入組態檔;
logrotate:重新啟用log檔案;

檢視FastCGI程序

FastCGI程序啟動後,可以通過命令「ps」或者「netstat」檢視到相關程序資訊,預設監聽9000埠;

netstat -antlp | grep 9000ps -ef | grep php-cgi

設定Nginx來支援PHP

Nginx本身不會對PHP進行解析,要想讓Nginx解析PHP請求,需要將PHP頁面的請求交給FastCGI程序監聽的IP地址和埠。Nginx通過反向代理的功能實現對PHP的解析。下面對Nginx解析PHP進行設定範例。

設定範例

      server {
        server_name www.ixdba.net ixdba.net;

        location / {
            index index.html index.php;
            root /web/www/www.ixdba.net;
        }

        location ~ \.php$ {
            root                html;
            fastcgi_pass        127.0.0.1:9000;
            fastcgi_index       index.php;
            fastcgi_param       SCRIPT_FILENAME  html$fastcgi_script_name;
            include             fastcgi_params;
        }
      }

location指令,將以「.php」結尾的檔案都交給「127.0.0.1:9000」來處理,這裡的IP和埠就是FastCGI程序監聽的IP和埠。

fastcgi_param指令,指定放置php動態程式的主目錄,也就是$fastcgi_script_name前的路徑,這裡是/usr/local/nginx/html。

fastcgi_params檔案是FastCGI程序的一個引陣列態檔,安裝Nginx後預設生成,這裡將它包含進來。

啟動nginx

/usr/local/nginx/sbin/nginx

測試Nginx對PHP的解析功能

在/usr/local/nginx/html,也就是上面的php動態程式主目錄下,建立一個phpinfo.php檔案,內容如下:

<?php phpinfo(); ?>

然後通過瀏覽器存取http://www.ixdba.net/index.html,將會顯示Nginx歡迎頁;
瀏覽器存取http://www.ixdba.net/phpinfo.php,會出現php安裝及功能列表資訊;


優化Nginx中FastCGI

新增一些優化指令可以讓php環境高效穩定的執行,下面給出一些範例,新增到nginx組態檔的http層級:

為fastcgi快取指定檔案路徑,目錄結構等級、關鍵字區域儲存時間和非活動刪除時間;

fastcgi_cache_path /usr/local/nginx/fastcgi_cache levels=1:2 keys_zone=Test:10m inactive=5m;

連線到後端fastcgi的超時時間;

fastcgi_connect_timeout 300;

向fastcgi傳送請求的超時時間,是已經完成兩次握手後向fastcgi傳送請求的超時時間;

fastcgi_send_timeout 300;

接收fastcgi應答的超時時間,是已經完成兩次握手後接收fastcgi應答的超時時間;

fastcgi_read_timeout 300;

讀取fastcgi應答第一部分需要緩衝區的大小;

fastcgi_buffer_size 64k;

本地需要多少和多大的緩衝區來緩衝fastcgi的應答請求;

fastcgi_buffers 4 64k;

預設值為fastcgi_buffers的兩倍;

fastcgi_busy_buffers_size 128k;

寫入快取檔案時使用多大的資料塊,預設為fastcgi_buffers的兩倍;

fastcgi_temp_file_write_size 128k;

開啟fastcgi快取併為其指定一個名稱,可以有效降低cpu負載,防止502錯誤。

fastcgi_cache TEST;

fastcgi_cache_valid指定應答程式碼的快取時間。
將200, 302的應答時間快取1小時;

fastcgi_cache_valid 200 302 1h;

將301應答快取一天;

fastcgi_cache_valid 301 1d;

其餘應答快取1分鐘;

fastcgi_cache_valid any 1m;

以上就是FastCGI怎麼安裝PHP的詳細內容,更多請關注TW511.COM其它相關文章!