1. 程式人生 > >【LNMP】Nginx訪問日誌、Nginx日誌切割、靜態檔案不記錄日誌和過期時間

【LNMP】Nginx訪問日誌、Nginx日誌切割、靜態檔案不記錄日誌和過期時間

一、 Nginx訪問日誌

 日誌格式

搜尋log_format:


 vim /usr/local/nginx/conf/nginx.conf 


各個段的意思:


除了在主配置檔案nginx.conf裡定義日誌格式外,還需要在虛擬主機配置檔案中增加內容。

先進入目錄:

/usr/local/nginx/conf/vhost


編輯test.com.conf虛擬主機配置檔案,並增加以下內容:

vim test.com.conf

 access_log /tmp/test.com.log amo;


 這裡的combined_realip就是在nginx.conf中定義的日誌格式名字,我們改為amo

檢測結果並重新載入:

/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload 





再來測試一下結果:
 curl -x127.0.0.1:80 test.com -I 

curl -x127.0.0.1:80 test.com/admin/index.html/adfsadf -I  (隨便curl一個測試)

然後再檢視日誌:

 cat /tmp/test.com.log


二、 Nginx日誌切割

 自定義shell 指令碼並寫入如下內容:
 vim /usr/local/sbin/nginx_log_rotate.sh


#! /bin/bash
## 假設nginx的日誌存放路徑為

 /data/logs/      
d=`date -d "-1 day" +%Y%m%d` 
logdir="/tmp/"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `ls *.log`
do
    mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`


然後執行一下:

sh -x  /usr/local/sbin/nginx_log_rotate.sh      (sh -x 視覺化)


檢視一下/tmp目錄:



 寫完指令碼之後還要加一個任務計劃crontab -e

每天凌晨0點執行一下這個指令碼:


 0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh


定期刪除日誌:

find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm 

(找出30天前名字為log-*字尾的日誌並刪除)

三、 靜態檔案不記錄日誌和過期時間

編輯test.com.conf 並且配置如下:

vim test.com.conf


location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
          expires      7d;
          access_log off;
    }
location ~ .*\.(js|css)$
    {
          expires      12h;
          access_log off;
    }


再檢測並重新載入一下:

/usr/local/nginx/sbin/nginx -t

/usr/local/nginx/sbin/nginx -s reload


最後來測試一下:

進入目錄並建立1.gif  和2.js 字尾的檔案


再curl看一下狀態結果並檢視日誌確認(gif和js的沒有日誌記錄):


再來測試一下過期時間:

先curl一下,因為之前有定義過期expires 12h,所以狀態中有這個max-age

curl -x127.0.0.1:80 -I  test.com/2.js


我們再去修改一下指令碼檔案:

vim /usr/local/nginx/conf/vhost/test.com.conf

將定義js模組的 expires 12h 註釋掉


檢測並重新載入:


再curl檢視一下狀態:


發現沒有了Cache-Control: max-age=43200 這一行的狀態,這個是因為過期時間我們沒有定義。