Nginx访问日志日志切割静态文件管理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Nginx访问日志日志切割静态文件管理相关的知识,希望对你有一定的参考价值。

12.10 访问日志

nginx日志格式:

[[email protected] ~]# vim /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_useragent"‘;
说明:
“combined
realip”:日志格式名称;‘$remote addr $http x forwarded for [$time_ local]‘ ‘ $host "$requesturi" $status‘ ‘ "$http referer" "$http user agent"‘ :日志内容。
注释:

名称 含义
$remote_addr 客户端IP(公网IP)
$http_x_forwarded_for 代理服务器的IP
$time_local 服务器本地时间
$host 访问主机名(域名)
$request_uri 访问的URL地址
$status 状态码
$http_referer referer
$http_user_agent user_agent
定义虚拟主机日志格式

定义虚拟主机的前提是在Nginx配置文件中设定日志格式,然后才能在虚拟主机中进行调用(格式名称)。

[[email protected] ~]# cd /usr/local/nginx/conf/vhost/
[[email protected] vhost]# ls
aaa.com.conf test.com.conf

定义test.com.conf日志格式:
[[email protected] vhost]# vim test.com.conf
……
access_log /tmp/test.com.log combined_realip;
#指定日志位置及格式

检查错误:
[[email protected] 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

注: 如果不指定日志格式,系统使用默认日志格式,记录内容较简单。

检测:

[[email protected] vhost]# curl -x127.0.0.1:80 test.com
This is test.com
[[email protected] vhost]# cat /tmp/test.com.log
127.0.0.1 - [11/Aug/2017:15:09:54 +0800] test.com "/" 200 "-" "curl/7.29.0"
12.11 Nginx日志切割

因为Nginx没有自带的日志切割工具,所以需要借助系统日志切割命令或使用日志切割脚本。

日志切割脚本

为了方便管理,shell脚本统一保存位置:/usr/local/sbin/

[[email protected] vhost]# vim /usr/local/sbin/nginx_log_rotate.sh

#! /bin/bash
d=date -d "-1 day" +%Y%m%d
#定义切割时间(切割一天前的日志)
logdir="/tmp/"
#此处指定要切割的日志路径(该路径来自虚拟主机配置文件)
nginx_pid="/usr/local/nginx/logs/nginx.pid"
#调用pid的目的是执行命令:/bin/kill -HUP cat $nginx_pid
#该命令等价于命令:nginx -s reload(重新加载文件),确保与虚拟主机配置文件变更保持同步
#该地址来自nginx配置文件
cd $logdir
for log in ls *.log
do
mv $log $log-$d
done
#此处使用通配进行循环,对所有复合条件的日志文件进行切割
/bin/kill -HUP cat $nginx_pid
#执行此命令进行重载生成新的日志文件来记录新的日志
执行该脚本:

[[email protected] vhost]# sh -x /usr/local/sbin/nginx_log_rotate.sh
++ date -d ‘-1 day‘ +%Y%m%d

  • d=20170810
  • logdir=/tmp/
  • nginx_pid=/usr/local/nginx/logs/nginx.pid
  • cd /tmp/
    ++ ls test.com.log yum.log
  • for log in ‘ls *.log
  • mv test.com.log test.com.log-20170810
  • for log in ‘ls *.log
  • mv yum.log yum.log-20170810
    ++ cat /usr/local/nginx/logs/nginx.pid
  • /bin/kill -HUP 1251
    说明: -x选项的作用是显示脚本执行过程。

注: 该脚本配合任务计划cron使用,定期进行切割和清理。

12.12 静态文件不记录日志&过期时间

核心配置参数:

[[email protected] vhost]# vim test.com.conf
location ~ ..(gif|jpg|jpeg|png|bmp|swf)$
#匹配文件类型
{
expires 7d;
#过期时间为7天
access_log off;
#不记录该类型文件的访问日志
}
location ~ .
.(js|css)$
{
expires 12h;
#过期时间为12小时
access_log off;
#不记录该类型文件的访问日志
}
access_log /tmp/test.com.log combined_realip;
#指定日志位置及格式
检测:

[[email protected] 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
[[email protected] vhost]# /usr/local/nginx/sbin/nginx -s reload

访问index.html
[[email protected] vhost]# !curl
curl -x127.0.0.1:80 test.com
This is test.com

[[email protected] vhost]# !cat
cat /tmp/test.com.log
127.0.0.1 - [11/Aug/2017:17:45:28 +0800] test.com "/" 200 "-" "curl/7.29.0"
即:有日志!

访问baidu.png文件:
[[email protected] test.com]# curl -x127.0.0.1:80 test.com/baidu.png -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Fri, 11 Aug 2017 09:47:57 GMT
Content-Type: image/png
Content-Length: 3706
Last-Modified: Tue, 01 Aug 2017 10:13:45 GMT
Connection: keep-alive
ETag: "59805459-e7a"
Expires: Fri, 18 Aug 2017 09:47:57 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes
说明:max-age=604800s=7天,即该文件缓存的过期时间为7天!

[[email protected] test.com]# cat /tmp/test.com.log
127.0.0.1 - [11/Aug/2017:17:45:28 +0800] test.com "/" 200 "-" "curl/7.29.0"
即:无该文件的访问日志!!!

以上是关于Nginx访问日志日志切割静态文件管理的主要内容,如果未能解决你的问题,请参考以下文章

nginx访问日志,日志切割,静态文件不记录日志和过期时间

四十八Nginx访问日志Nginx日志切割静态文件不记录日志和过期时间

12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期

12.10 Nginx访问日志 12.11 Nginx日志切割 12.12 静态文件不记录日志和过期

nginx访问日志配置+日志切割+不记录静态文件日志+设置静态文件过期时间

nginx访问日志,日志切割,静态文件不记录日志