最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PHP連接Nginx服務(wù)器并解析Nginx日志的方法

 更新時(shí)間:2015年08月16日 12:20:46   作者:低調(diào)小一  
這篇文章主要介紹了PHP連接Nginx服務(wù)器并解析Nginx日志的方法,PHP+Nginx也是目前一種相當(dāng)流行的服務(wù)器搭建方案,需要的朋友可以參考下

php與nginx整合

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

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

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

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

拷貝php的啟動(dòng)腳本

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

給啟動(dòng)腳本加可執(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

打開(kāi)注釋pid = run/php-fpm.pid

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

listen = 127.0.0.1:9000

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

user = nginx
group = nginx

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

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

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

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

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

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

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

pm.max_requests = 500

標(biāo)簽allowed_clients用于設(shè)置允許訪問(wèn)FastCGI進(jìn)程解析器的IP地址。如果不在這里指定IP地址,Nginx轉(zhuǎn)發(fā)過(guò)來(lái)的PHP解析請(qǐng)求將無(wú)法被接受。

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

5.管理FastCGI進(jìn)程
在配置完php-fpm后,就可以啟動(dòng)FastCGI進(jìn)程了。啟動(dòng)fastcgi進(jìn)程有兩種方式:

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

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

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

  • q start,啟動(dòng)PHP的FastCGI進(jìn)程。
  • q stop,強(qiáng)制終止PHP的FastCGI進(jìn)程。
  • q quit,平滑終止PHP的FastCGI進(jìn)程。
  • q restart,重啟PHP的FastCGI進(jìn)程。
  • q reload,重新加載PHP的php.ini。
  • q logrotate,重新啟用log文件。
  • reload是個(gè)很重要的參數(shù),它可以在PHP的FastCGI進(jìn)程不中斷的情況下重新加載改動(dòng)過(guò)的php.ini,因此通過(guò)php-fpm可以平滑變更FastCGI模式下的PHP設(shè)置。
[root@server79 etc]# /etc/init.d/php-fpm start

配置nginx的主配置文件,打開(kāi)與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()?>

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


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          : 虛擬主機(jī)的主機(jī)名稱 
    remote_addr          : 遠(yuǎn)程客戶端的ip地址 
    remote_user          : 遠(yuǎn)程客戶端用戶名稱 
    time_local           : 訪問(wèn)的時(shí)間與時(shí)區(qū) 
    status           : 記錄請(qǐng)求返回的http狀態(tài)碼 
    body_bytes_sent      : 發(fā)送給客戶端的文件主體內(nèi)容的大小 
    http_referer             : 從哪個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)  
    http_user_agent      : 客戶端瀏覽器信息 
    http_x_forwarded_for     : 客戶端的真實(shí)ip 


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


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

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

php代碼

 /** 
  * Description:按行讀取文件內(nèi)容進(jìn)行過(guò)濾匹配 
  * 
  * @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; 
 } 

相關(guān)文章

  • Yii 使用intervention/image拓展實(shí)現(xiàn)圖像處理功能

    Yii 使用intervention/image拓展實(shí)現(xiàn)圖像處理功能

    這篇文章主要介紹了Yii 使用intervention/image拓展實(shí)現(xiàn)圖像處理功能,需要的朋友可以參考下
    2019-06-06
  • 領(lǐng)悟php接口中interface存在的意義

    領(lǐng)悟php接口中interface存在的意義

    本篇文章是對(duì)php接口中interface存在的意義進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • PHP設(shè)計(jì)模式之迭代器模式淺析

    PHP設(shè)計(jì)模式之迭代器模式淺析

    迭代器(Iterator)模式,它在一個(gè)很常見(jiàn)的過(guò)程上提供了一個(gè)抽象:位于對(duì)象圖不明部分的一組對(duì)象(或標(biāo)量)集合上的迭代。迭代有幾種不同的具體執(zhí)行方法:在數(shù)組屬性,集合對(duì)象,數(shù)組,甚至一個(gè)查詢結(jié)果集之上迭代
    2023-04-04
  • PHP學(xué)習(xí)筆記之字符串編碼的轉(zhuǎn)換和判斷

    PHP學(xué)習(xí)筆記之字符串編碼的轉(zhuǎn)換和判斷

    GBK 和 UTF-8 編碼的轉(zhuǎn)換是一個(gè)非常惡心的事情,比如像 PHP 中的 json_encode 本身根本不支持 GBK 形式的編碼。有兩個(gè)庫(kù)函數(shù)能夠支持編碼的轉(zhuǎn)換,通常能夠想到的就是 iconv 函數(shù),使用起來(lái)也非常爽:
    2014-05-05
  • PHP 身份驗(yàn)證方面的函數(shù)

    PHP 身份驗(yàn)證方面的函數(shù)

    寫(xiě)了幾個(gè)身份證方面的函數(shù),個(gè)人感覺(jué)挺有用的,特別是在網(wǎng)絡(luò)問(wèn)卷調(diào)查時(shí),對(duì)個(gè)人信息里的身份證進(jìn)行驗(yàn)證很有用,但是應(yīng)者寥寥,還是收在自己的blog里算了。
    2009-10-10
  • 解析php中const與define的應(yīng)用區(qū)別

    解析php中const與define的應(yīng)用區(qū)別

    本篇文章是對(duì)php中const與define的使用區(qū)別進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下
    2013-06-06
  • 一文精通php多版本管理工具phpbrew使用教程

    一文精通php多版本管理工具phpbrew使用教程

    這篇文章主要為大家介紹了php多版本管理工具phpbrew使用教程詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • PHP重定向與偽靜態(tài)區(qū)別

    PHP重定向與偽靜態(tài)區(qū)別

    偽靜態(tài)是SEO重要的方法,通過(guò)重定向來(lái)實(shí)現(xiàn),并且可以通過(guò)重定向來(lái)隱藏網(wǎng)站的技術(shù),過(guò)濾異常訪問(wèn)。本課分為兩部分,前半部分詳細(xì)介紹Apache重定向的基礎(chǔ)知識(shí),后半部分通過(guò)多個(gè)實(shí)際案例再次加深對(duì)重定向的理解,并且會(huì)演示各種重定向設(shè)置后的實(shí)際效果。
    2017-02-02
  • php操作(刪除,提取,增加)zip文件方法詳解

    php操作(刪除,提取,增加)zip文件方法詳解

    本文給大家分享的是php操作zip文件的方法示例,包括了從zip壓縮文件中提取文件、從一個(gè)zip壓縮文件中刪除文件、添加一個(gè)文件到zip壓縮文件中,推薦給大家,有需要的小伙伴參考下。
    2015-03-03
  • php mysql PDO 查詢操作的實(shí)例詳解

    php mysql PDO 查詢操作的實(shí)例詳解

    這篇文章主要介紹了php mysql PDO 查詢操作的實(shí)例詳解的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-09-09

最新評(píng)論

文山县| 丹东市| 石嘴山市| 定远县| 桦川县| 东明县| 海门市| 开阳县| 吴桥县| 梅河口市| 佛山市| 紫云| 潼关县| 醴陵市| 新巴尔虎右旗| 穆棱市| 丽水市| 湟中县| 临泽县| 苏尼特左旗| 屏山县| 恩施市| 长海县| 和田市| 靖远县| 东源县| 恩施市| 行唐县| 郴州市| 长泰县| 莱芜市| 古交市| 宁陕县| 大余县| 文安县| 怀化市| 闸北区| 肇庆市| 栾城县| 吴旗县| 安岳县|