12.10 Nginx访问日志
12.11 Nginx日志切割
12.12 静态文件不记录日志和过期时间
12.10 Nginx访问日志
1 打开配置文件,搜索/log_format,查看日志文件格式。或者直接grep过滤出来
[root@AliKvn vhost]# grep -A2 log_format /usr/local/nginx/conf/nginx.conf
log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]' ' $host "$request_uri" $status' ' "$http_referer" "$http_user_agent"';
2 其中combined_realip是日志格式名称,可以自定义。
#vim nginx.cnf
3 除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加
[root@AliKvn vhost]# vim test.com.conf
access_log /tmp/test.com.log aming;
4 -t && -s reload 检查并重新加载
[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -s reload
5 curl测试
6 访问日志
12.11 Nginx日志切割
1 自定义shell 脚本
vim /usr/local/sbin/nginx_log_rotate.sh //写入如下内容
shell脚本格式
#! /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`
参数解析
d=`date -d "-1 day" +%Y%m%d`
这里的格式是现在的时间,减去1天,意思几时今天的昨天。
日志一般是第二天凌晨0:00生成的,所以切割日志,必然是昨天的时间。
%Y%m%d` 是时间的格式,表示年,月,日。
logdir="/tmp/"
日志所在路径,此处应该是/tmp/,因为test.com.log在tmp/
nginx_pid="/usr/local/nginx/logs/nginx.pid"
列出nginx_pid路径目的是配合执行-HUP `cat $nginx_pid`变量使用,
/bin/kill -HUP `cat $nginx_pid`相当于nginx -s reload重新加载功能。
cd $logdir for log in `ls *.log` do mv $log $log-$d done
(cd $logdir)进入$logdir(/tmp/),
然后ls看看都有哪些.log(*.log)文件,把所有log的文件改名字,
名字格式是,昨天的日期加后缀.log(mv $log $log-$d),
参考for的格式:
for f in `ls `; do ls -l $f; done
文件 在哪 ls序列 `;
[root@AliKvn vhost]# for f in `ls `; do ls -l $f; done
-rw-r--r-- 1 root root 142 Apr 24 16:58 aaa.com.conf
-rw-r--r-- 1 root root 419 Apr 25 16:18 test.com.conf
2 执行脚本
[root@AliKvn vhost]# vim /usr/local/sbin/nginx_log_rotate.sh
[root@AliKvn tmp]# sh -x /usr/local/sbin/nginx_log_rotate.sh
++ date -d '-1 day' +%Y%m%d
+ d=20180424
+ logdir=/tmp/
+ nginx_pid=/usr/local/nginx/logs/nginx.pid
+ cd /tmp/
++ ls test.com.log
+ for log in '`ls *.log`'
+ mv test.com.log test.com.log-20180424
++ cat /usr/local/nginx/logs/nginx.pid
+ /bin/kill -HUP 17745
3 清理30天前的日志(这个看实际环境而操作,测试的话就无须做计划任务)
find /tmp/ -name *.log-* -type f -mtime +30 |xargs rm
4 任务计划,让其每天凌晨0:00去执行这个脚本(这个看实际环境而操作,测试的话就无须做计划任务)
#crontab -e
0 0 * * * /bin/bash /usr/local/sbin/nginx_log_rotate.sh
12.12 静态文件不记录日志和过期时间
大纲
1 配置如下
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)$
location ~匹配请求,后面带指定对应的静态文件。
\.(gif|jpg|jpeg|png|bmp|swf)$
\脱义,\.后缀,()里面是文件类型,|表示或者。
2 -t && -s reload 检查语法并重新加载
[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -t
nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful
[root@AliKvn vhost]# /usr/local/nginx/sbin/nginx -s reload
3 curl测试
准备工作:
touch 1.gif 和 2.js
分别键入任意内容1111 222
测试
[root@AliKvn test.com]# curl -x127.0.0.1:80 test.com/1.gif
111111111111111111111111111111111
[root@AliKvn test.com]# curl -x127.0.0.1:80 test.com/2.js
2222
[root@AliKvn test.com]# curl -x127.0.0.1:80 test.com/index.html
test.com
4 访问日志
[root@AliKvn test.com]# cat /tmp/test.com.log
127.0.0.1 - [25/Apr/2018:17:56:32 +0800] test.com "/index.html" 200 "-" "curl/7.29.0"
再次访问不存在的页面,404页面
[root@AliKvn test.com]# curl -x127.0.0.1:80 test.com/2.js11111111
404 Not Found
[root@AliKvn test.com]# !cat
cat /tmp/test.com.log
127.0.0.1 - [25/Apr/2018:17:56:32 +0800] test.com "/index.html" 200 "-" "curl/7.29.0"
127.0.0.1 - [25/Apr/2018:18:01:04 +0800] test.com "/2.js11111111" 404 "-" "curl/7.29.0"
访问日志记录可以看到,curl 1.gif与2.js的信息被过滤掉,
而其他没被标注的静态元素文件却被记录这访问记录。
5 测试过期时间