溫馨提示×

溫馨提示×

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

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

PHP怎么連接Nginx服務(wù)器并解析Nginx日志

發(fā)布時間:2021-08-04 17:20:10 來源:億速云 閱讀:155 作者:chen 欄目:開發(fā)技術(shù)

這篇文章主要講解了“PHP怎么連接Nginx服務(wù)器并解析Nginx日志”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“PHP怎么連接Nginx服務(wù)器并解析Nginx日志”吧!

php與nginx整合

PHP-FPM也是一個第三方的FastCGI進程管理器,它是作為PHP的一個補丁來開發(fā)的,在安裝的時候也需要和PHP源碼一起編譯,也就是說PHP-FPM被編譯到PHP內(nèi)核中,因此在處理性能方面更加優(yōu)秀;同時它在處理高并發(fā)方面也比spawn-fcgi引擎好很多,因此,推薦Nginx+PHP/PHP-FPM這個組合對PHP進行解析。
FastCGI 的主要優(yōu)點是把動態(tài)語言和HTTP Server分離開來,所以Nginx與PHP/PHP-FPM經(jīng)常被部署在不同的服務(wù)器上,以分擔前端Nginx服務(wù)器的壓力,使Nginx專一處理靜態(tài)請求和轉(zhuǎn)發(fā)動態(tài)請求,而PHP/PHP-FPM服務(wù)器專一解析PHP動態(tài)請求

#fastcgi
FastCGI是一個可伸縮地、高速地在HTTP server和動態(tài)腳本語言間通信的接口。多數(shù)流行的HTTP server都支持FastCGI,包括Apache、Nginx和lighttpd等,同時,F(xiàn)astCGI也被許多腳本語言所支持,其中就有PHP。
FastCGI是從CGI發(fā)展改進而來的。傳統(tǒng)CGI接口方式的主要缺點是性能很差,因為每次HTTP服務(wù)器遇到動態(tài)程序時都需要重新啟動腳本解析器來執(zhí)行解析,然后結(jié)果被返回給HTTP服務(wù)器。這在處理高并發(fā)訪問時,幾乎是不可用的。另外傳統(tǒng)的CGI接口方式安全性也很差,現(xiàn)在已經(jīng)很少被使用了。
FastCGI接口方式采用C/S結(jié)構(gòu),可以將HTTP服務(wù)器和腳本解析服務(wù)器分開,同時在腳本解析服務(wù)器上啟動一個或者多個腳本解析守護進程。當HTTP服務(wù)器每次遇到動態(tài)程序時,可以將其直接交付給FastCGI進程來執(zhí)行,然后將得到的結(jié)果返回給瀏覽器。這種方式可以讓HTTP服務(wù)器專一地處理靜態(tài)請求或者將動態(tài)腳本服務(wù)器的結(jié)果返回給客戶端,這在很大程度上提高了整個應(yīng)用系統(tǒng)的性能。
Nginx+FastCGI運行原理
Nginx不支持對外部程序的直接調(diào)用或者解析,所有的外部程序(包括PHP)必須通過FastCGI接口來調(diào)用。FastCGI接口在Linux下是socket,(這個socket可以是文件socket,也可以是ip socket)。為了調(diào)用CGI程序,還需要一個FastCGI的wrapper(wrapper可以理解為用于啟動另一個程序的程序),這個wrapper綁定在某個固定socket上,如端口或者文件socket。當Nginx將CGI請求發(fā)送給這個socket的時候,通過FastCGI接口,wrapper接納到請求,然后派生出一個新的線程,這個線程調(diào)用解釋器或者外部程序處理腳本并讀取返回數(shù)據(jù);接著,wrapper再將返回的數(shù)據(jù)通過FastCGI接口,沿著固定的socket傳遞給Nginx;最后,Nginx將返回的數(shù)據(jù)發(fā)送給客戶端,這就是Nginx+FastCGI的整個運作過程。

php與nginx整合
php.ini:php的主配置文件

[root@server79 php-5.4.12]# cp php.ini-production /usr/local/lnmp/php/etc/php.ini

拷貝php的啟動腳本

[root@server79 fpm]# pwd
/root/php-5.4.12/sapi/fpm
[root@server79 fpm]# cp init.d.php-fpm /etc/init.d/php-fpm

給啟動腳本加可執(zhí)行權(quán)限

[root@server79 fpm]# chmod +x /etc/init.d/php-fpm
[root@server79 ~]# vim /usr/local/lnmp/php/etc/php.ini
cgi.fix_pathinfo=0
date.timezone = /Asia/Shanghai
[root@server79 ~]# cp /usr/local/lnmp/php/etc/php-fpm.conf.default /usr/local/lnmp/php/etc/php-fpm.conf
[root@server79 etc]# vim php-fpm.conf

打開注釋pid = run/php-fpm.pid

php-fpm.conf文件參數(shù)解析
PHP的全局配置文件是php.ini,在上面的步驟中,已經(jīng)將此文件復(fù)制到了/usr/local/lnmp/php/etc/php.ini下??梢愿鶕?jù)每個應(yīng)用需求的不同,對php.ini進行相應(yīng)的配置。
下面重點介紹PHP-FPM引擎的配置文件。
根據(jù)上面指定的安裝路徑,PHP-FPM的默認配置文件為/usr/local/lnmp/php/etc/php-fpm.conf。
php-fpm.conf是一個XML格式的純文本文件,其內(nèi)容很容易看明白。這里重點介紹幾個重要的配置標簽:
標簽listen_address是配置fastcgi進程監(jiān)聽的IP地址以及端口,默認是127.0.0.1:9000。

listen = 127.0.0.1:9000

標簽user和group用于設(shè)置運行FastCGI進程的用戶和用戶組。需要注意的是,這里指定的用戶和用戶組要和Nginx配置文件中指定的用戶和用戶組一致。

user = nginx
group = nginx

標簽max_children用于設(shè)置FastCGI的進程數(shù)。根據(jù)官方建議,小于2GB內(nèi)存的服務(wù)器,可以只開啟64個進程,4GB以上內(nèi)存的服務(wù)器可以開啟200個進程。

<value name="max_children">5</value>

標簽request_terminate_timeout用于設(shè)置FastCGI執(zhí)行腳本的時間。默認是0s,也就是無限執(zhí)行下去,可以根據(jù)情況對其進行修改。

<value name="request_terminate_timeout">0s</value>

標簽rlimit_files用于設(shè)置PHP-FPM對打開文件描述符的限制,默認值為1024。這個標簽的值必須和Linux內(nèi)核打開文件數(shù)關(guān)聯(lián)起來,例如要將此值設(shè)置為65535,就必須在Linux命令行執(zhí)行'ulimit -HSn 65536'。

<value name="rlimit_files">1024</value>

標簽max_requests指明了每個children最多處理多少個請求后便會被關(guān)閉,默認的設(shè)置是500。

pm.max_requests = 500

標簽allowed_clients用于設(shè)置允許訪問FastCGI進程解析器的IP地址。如果不在這里指定IP地址,Nginx轉(zhuǎn)發(fā)過來的PHP解析請求將無法被接受。

<value name="allowed_clients">127.0.0.1</value>

5.管理FastCGI進程
在配置完php-fpm后,就可以啟動FastCGI進程了。啟動fastcgi進程有兩種方式:

/usr/local/php/bin/php-cgi --fpm

或者

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

建議采用第二種方式啟動FastCGI進程。
/usr/local/php/sbin/php-fpm還有其他參數(shù),具體為start|stop|quit|restart|reload|logrotate。
每個啟動參數(shù)的含義如下:

  • q start,啟動PHP的FastCGI進程。

  • q stop,強制終止PHP的FastCGI進程。

  • q quit,平滑終止PHP的FastCGI進程。

  • q restart,重啟PHP的FastCGI進程。

  • q reload,重新加載PHP的php.ini。

  • q logrotate,重新啟用log文件。

  • reload是個很重要的參數(shù),它可以在PHP的FastCGI進程不中斷的情況下重新加載改動過的php.ini,因此通過php-fpm可以平滑變更FastCGI模式下的PHP設(shè)置。

[root@server79 etc]# /etc/init.d/php-fpm start

配置nginx的主配置文件,打開與php的接口

[root@server79 conf]# pwd
/usr/local/lnmp/nginx/conf
[root@server79 conf]# vim nginx.conf
user nginx;
#
location ~ \.php$ {
root html; 
fastcgi_pass 127.0.0.1:9000; //本地9000端口
fastcgi_index index.php;
# fastcgi_param SCRIPT_FILENAME /scripts$fastcgi_script_name;
include fastcgi.conf;
}
[root@server79 conf]# nginx -t^C
[root@server79 conf]# nginx -s reload^C
[root@server79 html]# pwd
/usr/local/lnmp/nginx/html
[root@server79 html]# cat index.php
<?php
phpinfo()?>

測試:瀏覽器中輸入192.168.0.179/index.php,出現(xiàn)php頁面


PHP解析Nginx日志
nginx日志格式

access_log日志格式

 log_format main '$server_name$remote_addr$remote_user[$time_local]"$request"' 
      '$status$body_bytes_sent"$http_referer"' 
      '"$http_user_agent""$http_x_forwarded_for"';


日志參數(shù)

    server_name          : 虛擬主機的主機名稱 
    remote_addr          : 遠程客戶端的ip地址 
    remote_user          : 遠程客戶端用戶名稱 
    time_local           : 訪問的時間與時區(qū) 
    status           : 記錄請求返回的http狀態(tài)碼 
    body_bytes_sent      : 發(fā)送給客戶端的文件主體內(nèi)容的大小 
    http_referer             : 從哪個頁面鏈接訪問過來  
    http_user_agent      : 客戶端瀏覽器信息 
    http_x_forwarded_for     : 客戶端的真實ip 


日志分割符
使用特殊的不可打印字符^A(ctrl+v,ctrl+a)作為日志分割符


根據(jù)關(guān)鍵字過濾文件內(nèi)容

需求
根據(jù)http的請求里是否有“weibo”這個關(guān)鍵字提取文件的內(nèi)容

php代碼

 /** 
  * Description:按行讀取文件內(nèi)容進行過濾匹配 
  * 
  * @return array 
  */ 
 function readFileContent ($filename) 
 { 
  $weibo_content = array(); 
  $fh = @fopen($filename, 'r'); 
   
  if ($fh) { 
   while (! feof($fh)) { 
    $row = fgets($fh, 4096); 
    $row_arr = explode("", $row); 
    if (isset($row_arr[3]) && preg_match('/weibo/', $row_arr[3])) { 
     $weibo_content[] = $row_arr; 
    } 
   } 
  } 
  fclose($fh); 
   
  return $weibo_content; 
 }

感謝各位的閱讀,以上就是“PHP怎么連接Nginx服務(wù)器并解析Nginx日志”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對PHP怎么連接Nginx服務(wù)器并解析Nginx日志這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

向AI問一下細節(jié)

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

AI