1. 程式人生 > >十二周三課 Nginx訪問日誌、 Nginx日誌切割、 靜態文件不記錄日誌和過期時間

十二周三課 Nginx訪問日誌、 Nginx日誌切割、 靜態文件不記錄日誌和過期時間

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裏定義日誌格式外,還需要在虛擬主機配置文件中增加。

我們用 access_log來定義他的訪問日誌路徑在哪裏。
我們用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:45:41 +0800] test2.com "/admin/index.html/kldfjsaldjflk" 301 "-" "curl/7.29.0"
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日誌切割、 靜態文件不記錄日誌和過期時間