十二周三課 Nginx訪問日誌、 Nginx日誌切割、 靜態文件不記錄日誌和過期時間
Nginx的文件格式存在於主配置文件中。
/usr/local/nginx/conf/nginx.conf
然後搜索log_format找到他的配置文件
這樣我們就可以進行日誌的格式配置了。
我們常用如下配置。
$remote_addr
客戶端IP(公網IP)
$http_x_forwarded_for
代理服務器的IP
$time_local
服務器本地時間
$host
訪問主機名(域名)
$request_uri
訪問的url地址
$status
狀態碼
$http_referer
referer
$http_user_agent
user_agent
除了在主配置文件nginx.conf裏定義日誌格式外,還需要在虛擬主機配置文件中增加。
我們用test.com.conf來舉例子。我們在vhost目錄下打開test.com.conf
然後輸入 access_log /tmp/test.com.log aming;
這裏我們需要註意的是我們不要把這行配置放到if的大括號中,而是要放到server的大括號中。
然後我我們進行語法檢驗和重新載入
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload
然後我們訪問以下我們定義的test2.com、test3.com、test4.com,然後再次訪問cat /tmp/test.com.log。這樣日誌中就出現了我們剛才訪問的日誌了。
127.0.0.1 - [25/Apr/2018:20:46:32 +0800] test3.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
127.0.0.1 - [25/Apr/2018:20:46:37 +0800] test2.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
Nginx日誌切割
首先我們創建一個shell腳本,以後我麽可以將腳本放到 /usr/local/sbin下。
vim /usr/local/sbin/nginx_logrotate.sh
然後輸入一下內容
#! /bin/bash
d=date -d "-1 day" +%Y%m%d
(生成昨天的日期,格式為年-月-日)
logdir="/data/logs"
nginx_pid="/usr/local/nginx/logs/nginx.pid" (是為了執行最後一條命令,pid的路徑一定要寫對)
cd $logdir (進入到日誌目錄下)
for log in ls *.log
(for循環)
do
mv $log $log-$d (然後將日誌改名字)
done
/bin/kill -HUP cat $nginx_pid
(從新加載,生成新的log)
然後我們執行一下腳本,其中-x是顯示執行過程,sh是執行腳本
sh -x /usr/local/sbin/nginx_logrotate.sh
++ date -d ‘-1 day‘ +%Y-%m-%d
- d=2018-04-24
- logdir=/tmp/
- nginx_pid=/usr/local/nginx/logs/nginx.pid
- cd /tmp/
++ ls test.com.log - for log in ‘
ls *.log
‘ - mv test.com.logtest.com.log-2018-04-24
++ cat /usr/local/nginx/logs/nginx.pid - /bin/kill -HUP 1387
然後查看一下tmp目錄,發現多了兩個文件
test.com.log-2018-04-24
test.com.log
這就是日誌切割,以後每天都可以生成。
每天生成機會占用磁盤空間,我們可以用find命令將過去沒用的日誌刪除。
find /tmp/ -name .log- -type f -mtime +30 |xargs rm
然後我麽需要做一個計劃任務,每天0點執行。
crontab -e
然後在裏面,輸入0 0 * /bin/bash /usr/local/sbin/nginx_logrotate.sh
這樣就可以每天晚上0點執行日誌切割腳本了。
靜態文件不記錄日誌和過期時間
網站上有很多的圖片等靜態文件,這個量會很大,產生的日誌也會占用大量的空間,所以我們可以將日誌設置為不記錄日誌和過期時間。
首先編輯nginx.com.conf這個配置文件
然後加入以下內容
location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
{
expires 7d;
access_log off;
}
location ~ ..(js|css)$
{
expires 12h;
access_log off;
}
其中expires為過期時間。
然後保存退出,檢查語法是否錯誤和重新加載。
十二周三課 Nginx訪問日誌、 Nginx日誌切割、 靜態文件不記錄日誌和過期時間