【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的日誌存放路徑為
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 這一行的狀態,這個是因為過期時間我們沒有定義。