前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Nginx访问日志+日志切割+静态文件不记录和过期时间设置

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

作者头像
老七Linux
发布2018-05-09 16:22:38
9000
发布2018-05-09 16:22:38
举报
文章被收录于专栏:Laoqi's Linux运维专列

一、 Nginx访问日志

1.1 打开配置文件:
代码语言:javascript
复制
vim /usr/local/nginx/conf/vhost/../nginx.conf

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

代码语言:javascript
复制
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里定义日志格式外,还需要在虚拟主机配置文件中增加:

代码语言:javascript
复制
access_log /tmp/haha.com_acess.log zhdy;

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

代码语言:javascript
复制
[[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目录下:

代码语言:javascript
复制
vim /usr/local/sbin/nginx_logrotate.sh

添加如下内容:

代码语言:javascript
复制
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,然后就会再次生成一个新的日志文件。

代码语言:javascript
复制
for log in `ls *.log`
do
    mv $log $log-$d
done
把ls出来的log文件重新以日期的形式重命名。

测试:

代码语言:javascript
复制
[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  
然后就会有一个昨天的访问日志

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

代码语言:javascript
复制
#! /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 日志清理

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

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

代码语言:javascript
复制
find /tmp/ -name *.log-* -mtime +30 | xargs rm rf

2.3 创建计划任务

代码语言:javascript
复制
crontab -e

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

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

3.1 配置文件
代码语言:javascript
复制
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
          expires      7d;
          access_log off;
    }
location ~ .*\.(js|css)$
    {
          expires      12h;
          access_log off;
    }

详解:

代码语言:javascript
复制
location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$
    {
          expires      7d;
          access_log off;
    }
    
匹配.gif  .jpg  .jpeg等格式的静态文件不计入日志

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

代码语言:javascript
复制
[[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均没有被计入到日志

测试过期时间:

代码语言:javascript
复制
[[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
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016/08/11,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、 Nginx访问日志
    • 1.1 打开配置文件:
      • 1.2 格式分析:
        • 1.3 虚拟主机中定义:
        • 二、Nginx 日志切割
          • 2.1 为什么需要日志切割
          • 三、静态文件不记录和过期时间设置
            • 3.1 配置文件
            相关产品与服务
            轻量应用服务器
            轻量应用服务器(TencentCloud Lighthouse)是新一代开箱即用、面向轻量应用场景的云服务器产品,助力中小企业和开发者便捷高效的在云端构建网站、Web应用、小程序/小游戏、游戏服、电商应用、云盘/图床和开发测试环境,相比普通云服务器更加简单易用且更贴近应用,以套餐形式整体售卖云资源并提供高带宽流量包,将热门软件打包实现一键构建应用,提供极简上云体验。
            领券
            问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档