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

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

Linux

Nginx訪問日誌

Nginx訪問日誌主要有兩個參數控制:
log_format #用來定義記錄日誌的格式(可以定義多種日誌格式,取不同名字即可)
access_log #用來指定日至文件的路徑及使用的何種日誌格式記錄日誌

設置訪問日誌的格式,打開配置文件
vim /usr/local/nginx/conf/nginx.conf

搜索關鍵字log_format就可以找到日誌格式配置行
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 /tmp/1.log combined_realip;

這裏的/tmp/1.log為配置文件存放的地址,combined_realip就是在nginx.conf中定義的日誌格式名字

更改配置文件後需要重新加載配置文件才會生效

Nginx日誌切割

所謂自動分割Nginx日誌文件,就是指Rotate Nginx log files,即讓Nginx每天(或每個星期,可自定義控制)生成一個日誌文件,而不是將Nginx所有的運行日誌都放置在一個文件中,這樣每個日誌文件都相對較小,定位問題也更容易

日誌切割可以寫一個腳本實現,腳本文件最好放在/usr/local/sbin/下
執行命令:
vim /usr/local/sbin/nginx_logrotate.sh

寫入如下的內容:

#! /bin/bash
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

寫完腳本之後在加入仍無計劃即可
crontab -e

添加如下內容:
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh

靜態文件不記錄日誌和過期時間

編輯虛擬主機配置文件
vim /usr/local/nginx/conf/vhost/test.com.conf

在配置文件中加入如下內容

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

location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$ 匹配文件類型
expires 7d; 過期時間為7天
access_log off; 不記錄該類型文件的訪問日誌
location ~ .*\.(js|css)$ 匹配文件類型
expires 12h; 過期時間為12小時
access_log off; 不記錄該類型文件的訪問日誌
更改配置文件後需要檢查配置文件以及重新加載
/usr/local/nginx/sbin/nginx -t
/usr/local/nginx/sbin/nginx -s reload

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