亚洲最大看欧美片,亚洲图揄拍自拍另类图片,欧美精品v国产精品v呦,日本在线精品视频免费

  • 站長(zhǎng)資訊網(wǎng)
    最全最豐富的資訊網(wǎng)站

    CentOS下Nginx配置Web訪問(wèn)日志并結(jié)合Shell腳本定時(shí)切割

    在一個(gè)成熟的WEB系統(tǒng)里,沒(méi)有日志管理是不可以的,有了日志,可以幫助你得到用戶地域來(lái)源、跳轉(zhuǎn)來(lái)源、使用終端、某個(gè)URL訪問(wèn)量等相關(guān)信息;通過(guò)錯(cuò)誤日志,你可以得到系統(tǒng)某個(gè)服務(wù)或server的性能瓶頸等。因此,將日志好好利用,你可以得到很多有價(jià)值的信息。

    日志格式及定義

    (1)log_format
    log_format用來(lái)設(shè)置日志格式,也就是日志文件中每條日志的格式,具體如下:
    log_format name(格式名稱(chēng)) type(格式樣式)

    log_format main ‘$server_name $remote_addr – $remote_user [$time_local] “$request” ‘
    ‘$status $uptream_status $body_bytes_sent “$http_referer” ‘
    ‘”$http_user_agent” “$http_x_forwarded_for” ‘
    ‘$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time’;

    參數(shù)說(shuō)明:

    $server_name:虛擬主機(jī)名稱(chēng)。
    $remote_addr:遠(yuǎn)程客戶端的IP地址。
    -:空白,用一個(gè)“-”占位符替代,歷史原因?qū)е逻€存在。
    $remote_user:遠(yuǎn)程客戶端用戶名稱(chēng),用于記錄瀏覽者進(jìn)行身份驗(yàn)證時(shí)提供的名字,如登錄百度的用戶名scq2099yt,如果沒(méi)有登錄就是空白。
    [$time_local]:訪問(wèn)的時(shí)間與時(shí)區(qū),比如18/Jul/2012:17:00:01 +0800,時(shí)間信息最后的”+0800″表示服務(wù)器所處時(shí)區(qū)位于UTC之后的8小時(shí)。
    $request:請(qǐng)求的URI和HTTP協(xié)議,這是整個(gè)PV日志記錄中最有用的信息,記錄服務(wù)器收到一個(gè)什么樣的請(qǐng)求
    $status:記錄請(qǐng)求返回的http狀態(tài)碼,比如成功是200。
    $uptream_status:upstream狀態(tài),比如成功是200.
    $body_bytes_sent:發(fā)送給客戶端的文件主體內(nèi)容的大小,比如899,可以將日志每條記錄中的這個(gè)值累加起來(lái)以粗略估計(jì)服務(wù)器吞吐量。
    $http_referer:記錄從哪個(gè)頁(yè)面鏈接訪問(wèn)過(guò)來(lái)的。
    $http_user_agent:客戶端瀏覽器信息
    $http_x_forwarded_for:客戶端的真實(shí)ip,通常web服務(wù)器放在反向代理的后面,這樣就不能獲取到客戶的IP地址了,通過(guò)$remote_add拿到的IP地址是反向代理服務(wù)器的iP地址。反向代理服務(wù)器在轉(zhuǎn)發(fā)請(qǐng)求的http頭信息中,可以增加x_forwarded_for信息,用以記錄原有客戶端的IP地址和原來(lái)客戶端的請(qǐng)求的服務(wù)器地址。
    $ssl_protocol:SSL協(xié)議版本,比如TLSv1。
    $ssl_cipher:交換數(shù)據(jù)中的算法,比如RC4-SHA。
    $upstream_addr:upstream的地址,即真正提供服務(wù)的主機(jī)地址。
    $request_time:整個(gè)請(qǐng)求的總時(shí)間。
    $upstream_response_time:請(qǐng)求過(guò)程中,upstream的響應(yīng)時(shí)間。

    (2)access_log

    access_log指令用來(lái)指定日志文件的存放路徑(包含日志文件名)、格式和緩存大小,具體如下:
    access_log path(存放路徑) [format(自定義日志格式名稱(chēng)) [buffer=size | off]]
    舉例說(shuō)明如下:
    access_log logs/access.log main;
    如果想關(guān)閉日志,可以如下:
    access_log off;
    能夠使用access_log指令的字段包括:http、server、location。
    需要注意的是:Nginx進(jìn)程設(shè)置的用戶和組必須對(duì)日志路徑有創(chuàng)建文件的權(quán)限,否則,會(huì)報(bào)錯(cuò)。
    小技巧:如果需要在access_log中記錄post請(qǐng)求的參數(shù),可以參考這里。
    Nginx支持為每個(gè)location指定強(qiáng)大的日志記錄。同樣的連接可以在同一時(shí)間輸出到不止一個(gè)的日志中,更多信息請(qǐng)查看這里,這里,還有這里。

    下面拿我本地的虛擬機(jī)來(lái)簡(jiǎn)單配置一下日志,并獲取日志信息。

    日志生成的到Nginx根目錄logs/access.log文件,默認(rèn)使用“main”日志格式,也可以自定義格式。

    在Nginx下配置的虛擬主機(jī)

    server {
     listen 80;
     server_name mytest.com;
     location / {
        root /data/wwwroot/default/mytest;  //網(wǎng)站目錄
        index index.html;
     }
     access_log  /data/wwwlogs/mytest_log/access_nginx.log main; //日志路徑
     當(dāng)然也可以配置錯(cuò)誤日志路徑error_log……

    }

    Nginx主配置文件的配置規(guī)則

    http {
      include mime.types;
      log_format  main ‘$remote_addr – $remote_user  [$time_local]  “$request” ‘
                            ‘$status  $body_bytes_sent “http_referer” ‘
                            ‘ “$http_user_agent” “$http_x_forwarded_for” ‘;
    ……
    }

    記得配置完成先命令測(cè)試下是否OK,然后在重新加載配置文件

    [root@localhost mytest_log]# nginx -tc /usr/local/nginx/conf/nginx.conf
    nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
    nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful

    CentOS下Nginx配置Web訪問(wèn)日志并結(jié)合Shell腳本定時(shí)切割

    下面來(lái)說(shuō)一下定時(shí)切割(雖然新版的Nginx已經(jīng)支持)

    根據(jù)上面的配置,確定了日志路徑之后,我在/data/crontab目錄下創(chuàng)建了一個(gè)腳本

    #!/bin/bash
    LOGPATH=/data/wwwlogs/mytest_log/access_nginx.log //nginx的日志路徑
    BAKPATH=/data/wwwlogs/bak  //要備份的路徑
    bak=$BAKPATH/$(date -d yesterday +%Y%m%d%H%M).mytest.access.log  //定義了的bak變量
    echo $bak  //執(zhí)行輸出一下

    [root@localhost crontab]# chmod 777 nginx_log.sh  //賦權(quán)限

    [root@localhost crontab]# ./nginx_log.sh  //執(zhí)行腳本
    /data/wwwlogs/bak/201801101205.mytest.access.log //輸出的格式

    完整腳本如下

    #!/bin/bash
    #設(shè)置日志文件存放目錄
    LOGPATH=/data/wwwlogs/mytest_log/access_nginx.log
    BAKPATH=/data/wwwlogs/bak
     #備分文件名稱(chēng)
    bak=$BAKPATH/$(date -d yesterday +%Y%m%d%H%M).mytest.access.log
    #echo $bak
     #重命名日志文件
    mv $LOGPATH $bak
    touch $LOGPATH
     #向nginx主進(jìn)程發(fā)信號(hào)重新打開(kāi)日志,確保nginx.pid路徑正確
     #[root@localhost wwwlogs]# find / -name nginx.pid
     #/var/run/nginx.pid
    kill -USR1 `cat  /var/run/nginx.pid`

    然后創(chuàng)建定時(shí)器

    關(guān)于定時(shí)器詳細(xì)的講解在 http://fxwbio.com/Linux/2019-03/157851.htm 下

    01 00 * * * /data/crontab/nginx_log.sh  # 每天0時(shí)1分(建議在02-04點(diǎn)之間,系統(tǒng)負(fù)載小) 

    查看一下/data/wwwlogs/bak就會(huì)有日志文件了

    贊(0)
    分享到: 更多 (0)
    網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)