【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 这一行的状态,这个是因为过期时间我们没有定义。