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

404 Not Found


nginx/1.8.0

[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 测试过期时间