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

一、 Nginx访问日志

1.1 打开配置文件:

vim /usr/local/nginx/conf/vhost/../nginx.conf

找到如下,是定义日志格式:

log_format combined_realip '$remote_addr $http_x_forwarded_for [$time_local]'
    ' $host "$request_uri" $status'
    ' "$http_referer" "$http_user_agent"';

combined_realip; 是定义日志的名称可以改为zhdy。
注:这边改成什么名字,待会引用的时候就写成什么!

1.2 格式分析:

$remote_addr

客户端IP(公网IP)

$http_x_forwarded_for

代理服务器的IP

$time_local

服务器本地时间

$host

访问主机名(域名)

$request_uri

访问的url地址

$status

状态码

$http_referer

referer 源地址

$http_user_agent

user_agent

1.3 虚拟主机中定义:

如上除了在主配置文件nginx.conf里定义日志格式外,还需要在虚拟主机配置文件中增加:

access_log /tmp/haha.com_acess.log zhdy;

-t && -s reload 测试并重载。

[[email protected] vhost]# curl -x127.0.0.1:80 www.haha.com/admin.php -uzhdy:asd9577
this is test page which test if you needs key or not![[email protected] vhost]# ls /tmp/
haha.com_acess.log 
[[email protected] vhost]# cat /tmp/haha.com_acess.log 
127.0.0.1 - [11/Aug/2017:18:13:12 +0800] www.haha.com "/admin.php" 200 "-" "curl/7.29.0"

然后我们就看到已经展现出了咱们刚刚定义个一种格式的日志。

二、Nginx 日志切割

2.1 为什么需要日志切割

日志对于统计排错来说非常有利的,但是如果一个100G的日志别说查看了就打开我们都需要等待很久这样不仅浪费了我们的硬件资源同时也浪费了时间。如果按照每天分成一个日志,是不是更有利于我们去排障呢?

由于Nginx不像Apache有自己的切割工具,在此我们需要写个脚本完成需求:

养成好的习惯把脚本放在sbin目录下:

vim /usr/local/sbin/nginx_logrotate.sh

添加如下内容:

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;生成昨天的日期

nginx_pid=”/usr/local/nginx/logs/nginx.pid”;就是为了最后一行而设定的。最后一行的意思和之前使用的 -s reload 是一个意思 重载nginx.pid,然后就会再次生成一个新的日志文件。

for log in `ls *.log`
do
    mv $log $log-$d
done
把ls出来的log文件重新以日期的形式重命名。

测试:

[root@zhdy-03 vhost]# sh /usr/local/sbin/nginx_logrotate.sh 
[root@zhdy-03 vhost]# ls /tmp/
haha.com_acess.log          
haha.com_acess.log-20170810  
然后就会有一个昨天的访问日志

例如针对每天的慢日志进行日志切割:

#! /bin/bash

d=`date -d "-1 day" +%Y%m%d`
logdir="/usr/local/php-fpm/var/log/"
nginx_pid="/usr/local/nginx/logs/nginx.pid"
cd $logdir
for log in `find . -name "*_slow.log"`
do
    mv $log $log-$d
done
/bin/kill -HUP `cat $nginx_pid`

find . -name "*_slow.log-*" -mtime +30 | xargs rm -rf

2.2 日志清理

有了切割可以满足我们的日常工作需要,但是随着访问量的剧增,如果不删除老的日志文件我们的磁盘很快就会占用完。

删除超过一个月的日志(当然这个也可以写在脚本里面)

find /tmp/ -name *.log-* -mtime +30 | xargs rm rf

2.3 创建计划任务

crontab -e

加入如下内容
0 0 * * * /bin/bash /usr/local/sbin/nginx_logrotate.sh

三、静态文件不记录和过期时间设置

3.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)$
    {
          expires      7d;
          access_log off;
    }
    
匹配.gif  .jpg  .jpeg等格式的静态文件不计入日志

测试+重载 (-t && -s reload)

[[email protected]03 www.haha.com]# curl -x127.0.0.1:80 www.hehe.com/asd.asd
<html>
<head><title>404 Not Found</title></head>
<body bgcolor="white">

[[email protected]03 www.haha.com]# curl -x127.0.0.1:80 www.hehe.com/1.js
TEST JS
[[email protected]03 www.haha.com]# curl -x127.0.0.1:80 www.hehe.com/2.jpg
JPG TEST 
[[email protected]03 www.haha.com]# cat /tmp/haha.com_access.log
127.0.0.1 - [11/Aug/2017:21:58:30 +0800] www.hehe.com "/admin.php" 200 "-" "curl/7.29.0"
127.0.0.1 - [11/Aug/2017:21:58:38 +0800] www.hehe.com "/asd.asd" 404 "-" "curl/7.29.0"

随便自定义了一个asd.asd被记录到日志,但是1.js和2.jpg均没有被计入到日志

测试过期时间:

[[email protected] www.haha.com]# curl -x127.0.0.1:80 www.hehe.com/2.jpg -I
HTTP/1.1 200 OK
Server: nginx/1.12.1
Date: Fri, 11 Aug 2017 14:12:22 GMT
Content-Type: image/jpeg
Content-Length: 10
Last-Modified: Fri, 11 Aug 2017 13:58:19 GMT
Connection: keep-alive
ETag: "598db7fb-a"
Expires: Fri, 18 Aug 2017 14:12:22 GMT
Cache-Control: max-age=604800
Accept-Ranges: bytes

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏IT笔记

Linux运维必须掌握的150个常用命令

有小伙伴留言说之前看了我分享里有一篇Linux基础命令详细版,但是太长,问我有没有简洁版的。 于是我就整理了下,以下这些命令,被称为“Linux运维必须掌握的1...

75080
来自专栏达摩兵的技术空间

docker下部署jenkins(一)

本文带你在docker中安装jenkins服务,为入门级别的介绍,建议阅读时间10-15min.

1.4K30
来自专栏Jerry的SAP技术分享

使用VM Tools让VMware虚拟机里的ubuntu能够共享Windows系统的文件夹

我们经常有这样的使用场景,在宿主机Windows(Linux)操作系统上通过VMware软件安装了一个Linux(Windows)的虚拟机, 然后需要在两种操作...

17030
来自专栏云极客Frey

腾讯云容器微服务API设计实践

本文会在腾讯云容器服务上面构造微服务基础小项目, 通过搭建ELK集群,实现利用Logstash 采集Nginx日志,收纳及利用kibana展示的功能。

2.6K220
来自专栏Albert陈凯

手把手教你安装大数据开发测试环境手把手教你安装大数据开发测试环境

手把手教你安装大数据开发测试环境 下载地址 http://isoredirect.centos.org/centos/6/isos/x86_64/ 安装虚拟...

45090
来自专栏散尽浮华

centos下升级git版本的操作记录

在使用git pull、git push、git clone的时候,或者在使用jenkins发版的时候,可能会报类似如下的错误: error: The req...

42080
来自专栏finleyMa

docker学习系列14 使用haproxy实现mysql集群的负载均衡

在上节中我们创建了 mysql 集群。 实际工作中,我们不希望让某一数据库节点处理所有的请求,这样的话单个负载高,性能差。

96520
来自专栏云计算教程系列

如何在Ubuntu 16.04使用Buildbot建立持续集成系统

Buildbot是一个基于Python的持续集成系统,用于自动化软件构建,测试和发布过程。

24630
来自专栏云知识学习

linux下安装安装杀毒软件clamav杀毒

一、安装clamav文件 相关下载链接:http://www.clamav.net/downloads 使用命令:wget 加上对应版本的软件链接

1.1K130
来自专栏散尽浮华

Tomcat自带的Session共享方案实施记录

一般来说,在多个tomcat集群业务中,session会话共享是必须的需求,不然前端nginx转发过来的请求不知道之前请求在哪台tomcat节点上,从而就找不到...

34020

扫码关注云+社区

领取腾讯云代金券