Nginx访问日志详解/日志切割/缓存过期时间

Nginx访问日志主要记录部署在nginx上的网站访问数据,日志格式定义在nginx主配置文件中。

nginx主配置文件:/etc/nginx/nginx.conf

查看nginx主配置文件:

[root@linux ~]# cat /etc/nginx/nginx.conf 

下图红框内就是定义的nginx访问日志的格式:
Nginx访问日志详解/日志切割/缓存过期时间_第1张图片
#main:格式名
$remote_addr:访问网站的IP
$remote_user:如果配置了用户认证,表示用户认证的用户名
$time_local:访问时间
$request:http方法,请求的链接,http版本
$status:http状态码
$body_bytes_sent:请求大小
$http_referer:客户端请求时的referer,通俗讲就是该请求是通过哪个链接跳转过来的
$http_user_agent:客户端操作系统和浏览器标识
$http_x_forwarded_for:如果使用了代理,记录代理IP

访问日志配置路径:
Nginx访问日志详解/日志切割/缓存过期时间_第2张图片
针对单个nginx虚拟主机配置访问日志:

1.编辑nginx虚拟主机配置文件:

[root@linux ~]# vi /etc/nginx/conf.d/default.conf

2.定义访问日志存放路径和格式:
Nginx访问日志详解/日志切割/缓存过期时间_第3张图片
3.重载nginx:

[root@linux ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@linux ~]# nginx -s reload

4.在浏览器访问虚拟主机配置的网站后即可生成日志信息:

[root@linux ~]# cat /data/logs/nginx.log 
192.168.234.1 - - [15/Oct/2019:14:48:15 +0800] "GET /?p=1 HTTP/1.1" 200 57931 "http://www.blog.com/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
192.168.234.1 - - [15/Oct/2019:14:48:15 +0800] "GET /wp-includes/js/comment-reply.min.js?ver=5.2.3 HTTP/1.1" 301 169 "http://www.blog.com/?p=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"
192.168.234.1 - - [15/Oct/2019:14:48:15 +0800] "GET /wp-includes/js/comment-reply.min.js?ver=5.2.3 HTTP/1.1" 200 2234 "http://www.blog.com/?p=1" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.75 Safari/537.36" "-"

nginx日志不记录静态文件:

在上面定义好的访问日志中,会记录特别多的请求信息,所以需要过滤掉一些图片、js、css类的请求日志,这样的日志一般记录的意义不大,当网站访问量大时还特别耗费磁盘空间。

编辑nginx虚拟主机配置文件:

[root@linux ~]# vi /etc/nginx/conf.d/default.conf 

添加以下内容:

location ~* \.(png|jpeg|gif|js|css|bmp|flv)$
    {
    	access_log off;
    }

#包含.png/.jpeg/.gif/.js/.css/.bmp/.flv结尾的请求就不会记录到访问日志中,点前面的 \ 表示脱义符,shell中点表示任意字符,~*表示不区分大小写匹配,详情查看上一篇文章:nginx location优先级详解

重载nginx即可生效:

[root@linux ~]# nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@linux ~]# nginx -s reload

nginx访问日志切割:

当nginx访问日志记录的信息越来越大的时候,不仅占磁盘空间还影响查看日志等操作,定时对nginx访问日志进行切割操作可以便于日志管理与查看

linux系统自带的日志切割工具logrotate:

配置文件:/etc/logrotate.conf
子配置文件:/etc/logrotate.d/*

由于当前机器上nginx是yum安装的,所以logrotate子配置文件目录已经存在nginx日志切割配置文件:

[root@linux ~]# cat /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily			#按天切割
        missingok		#忽略报错
        rotate 52		#保留52个切割文件(也就是52天)
        compress		#压缩(延后一天才会压缩)
        delaycompress	
        notifempty		#为空不压缩
        create 640 nginx adm	#创建新日志的权限,老日志文件会更名(xxxlog-20190101)
        sharedscripts	#从新载入配置文件,生成新的日志文件
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

#该配置文件第一行切割的日志文件为nginx访问日志文件

将上面添加的nginx单个虚拟主机的访问日志添加到nginx切割配置文件中:

/var/log/nginx/*.log /data/logs/nginx.log{  #添加虚拟主机的访问日志路径
        daily
        dateext		#切割文件按日期后缀保留
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 640 nginx adm
        sharedscripts
        postrotate
                if [ -f /var/run/nginx.pid ]; then
                        kill -USR1 `cat /var/run/nginx.pid`
                fi
        endscript
}

测试:

[root@linux ~]# logrotate -f /etc/logrotate.d/nginx 
[root@linux ~]# ls /data/logs/
nginx.log  nginx.log-20191015

#显示已成功切割,接下来每天凌晨就会自动切割nginx虚拟主机的访问日志了

nginx缓存静态文件过期时间配置:

上文中将png/jpeg/js/css等静态文件设置为不记录访问日志,那么这些文件在首次访问网站时,会缓存到本地,之后再吃访问,由于有了缓存就不会继续向服务器请求这些静态文件,节省带宽,但是如果网站有更新,涉及到的缓存不更新的话就显示不出更新内容,所以需要让缓存文件有时效性。

针对png/jpeg/js/css等静态文件设置缓存过期时间:

[root@linux ~]# vi /etc/nginx/conf.d/default.conf 

在针对png/jpeg/js/css等静态文件location中添加expires配置项:

  location ~* \.(png|jpeg|gif|js|css|bmp|flv)$
        {
                 access_log off;
                 expires 1d;
        }

#定义expires配置项值为1d,表示缓存过期时间为1天,如果上次访问网站时间超过1天就会更新缓存的静态文件,时间单位还可以设置为h(小时)、m(分钟)

你可能感兴趣的:(nginx访问日志,nginx虚拟主机,nginx日志切割,nginx缓存过期时间设置,Nginx)