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