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"';

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_Nginx

2 其中combined_realip是日志格式名称,可以自定义。

#vim nginx.cnf

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_日志切割_02

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_ 访问日志_03

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_ 访问日志_04

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测试

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_静态文件_05

6 访问日志

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_日志切割_06



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 静态文件不记录日志和过期时间

大纲

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_日志切割_07

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
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">
<center><h1>404 Not Found</h1></center>
<hr><center>nginx/1.8.0</center>
</body>
</html>
[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 测试过期时间

12.10-12.12 Nginx的访问日志,日志切割,静态文件不记录日志和过期时间_静态文件_08