nginx访问日志并删除指定天数前的日志记录配置方法

说明:

操作系统:CentOS

站点1:bbs.jb51.net

站点2:sns.jb51.net

Nginx安装路径:/usr/local/nginx

Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf

站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.jb51.net.conf

站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.jb51.net.conf

目的:

1、对站点1和站点2的nginx访问日志按天保存,日志路径为:

站点1:/usr/local/nginx/logs/nginx_logs/bbs_logs

站点2:/usr/local/nginx/logs/nginx_logs/sns_logs

2、只保留30天以内的日志记录

具体操作:

1、创建日志存放路径


复制代码 代码如下:

mkdir -p  /usr/local/nginx/logs/nginx_logs/bbs_logs
mkdir -p  /usr/local/nginx/logs/nginx_logs/sns_logs

2、设置Nginx日志记录格式

编辑vi /usr/local/nginx/conf/nginx.conf


复制代码 代码如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';

取消日志记录格式前面的注释,在最后添加一行,如下所示:


复制代码 代码如下:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"'
'$http_host $upstream_status $upstream_addr $request_time $upstream_response_time';  #新添加的一行

:wq!  #保存退出

3、设置虚拟主机配置文件

编辑vi /usr/local/nginx/conf/vhost/bbs.jb51.net.conf  #,在bbs.jb51.net;这一行下面添加


复制代码 代码如下:

access_log  logs/bbs_access.log  main;  #注意这里的main要和上一步中的main一致

:wq!  #保存退出

编辑vi /usr/local/nginx/conf/vhost/sns.jb51.net.conf ,在sns.jb51.net;这一行下面添加


复制代码 代码如下:

access_log  logs/sns_access.log  main;  #注意这里的main要和上一步中的main一致

复制代码 代码如下:

:wq!  #保存退出
service nginx reload  #重新加载nginx配置文件

4、创建Nginx日志切割脚本

编辑vi /home/crontab/cut_nginx_log.sh


复制代码 代码如下:

#!/bin/sh
logs_path="/usr/local/nginx/logs/"
DAYS=30
mv ${logs_path}bbs_access.log  ${logs_path}nginx_logs/bbs_logs/bbs_access_$(date -d "yesterday" +"%Y%m%d").log
mv ${logs_path}sns_access.log  ${logs_path}nginx_logs/sns_logs/sns_access_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
find ${logs_path}nginx_logs/bbs_logs/  -name "bbs_access_*" -type f -mtime +$DAYS -exec rm {} \;
find ${logs_path}nginx_logs/sns_logs/  -name "sns_access_*" -type f -mtime +$DAYS -exec rm {} \;

复制代码 代码如下:

:wq!  #保存退出
chmod +x /home/crontab/cut_nginx_log.sh  #添加脚本执行权限

5、添加任务计划,修改/etc/crontab

vi /etc/crontab在最后一行添加


复制代码 代码如下:

0 0 * * * root /home/crontab/cut_nginx_log.sh  #表示每天凌晨执行

:wq!  #保存退出

6、重新启动crond使设置生效


复制代码 代码如下:

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装
chkconfig crond on #设为开机启动
service crond start #启动

每天会在/usr/local/nginx/logs/nginx_logs/bbs_logs和/usr/local/nginx/logs/nginx_logs/sns_logs

目录下生成类似bbs_access_20140126.log和bbs_access_20140126.log的日志文件

并且只保留最近30天的日志记录

至此,Linux下定时切割Nginx访问日志并删除指定天数前的日志记录完成。

备注:如果脚本在执行过程中出现下面错误


复制代码 代码如下:

nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解决办法:


复制代码 代码如下:

/usr/local/nginx/sbin/nginx -c  /usr/local/nginx/conf/nginx.conf
#使用nginx -c的参数指定nginx.conf文件的位置

扩展阅读:Nginx访问日志参数说明


复制代码 代码如下:

192.168.21.1 - - [27/Jan/2014:11:28:53 +0800] "GET /2.php HTTP/1.1" 200 133 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36" "-"192.168.21.128 200 127.0.0.1:9000 0.119 0.119

$remote_addr:客户端地址  192.168.21.1

$remote_user:客户端用户 -

$time_local:时间和时区   27/Jan/2014:11:28:53 +0800

$request:请求的URL路径和HTTP协议   GET /2.php HTTP/1.1

$status: HTTP状态  200

$body_bytes_sent:发送给客户端页面大小  133

$http_referer:页面跳转来源 -

$http_user_agent:用户访问终端  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36

$http_x_forwarded_for:HTTP 代理中,请求端真实IP -

$http_host:用户在浏览器中输入的URL(IP或着域名)地址  192.168.21.128

$upstream_status: upstream状态    200

$upstream_addr: 后端upstream地址及端口  127.0.0.1:9000

$request_time: 页面访问总时间  0.119

$upstream_response_time:页面访问中upstream响应时间   0.119

时间: 2014-03-10

PHP统计nginx访问日志中的搜索引擎抓取404链接页面路径

我在服务器上有每天切割nginx日志的习惯,所以针对每天各大搜索引擎来访,总能记录一些404页面信息,传统上我只是偶尔分析下日志,但是对于很多日志信息的朋友,人工来筛选可能不是一件容易的事情,这不我个人自己慢慢研究了一点点,针对谷歌.百度.搜搜.360搜索.宜搜.搜狗.必应等搜索引擎的404访问生成为一个txt文本文件,直接上代码test.php. 复制代码 代码如下: <?php //访问test.php?s=google $domain='http://www.jb51.net'; $spi

Nginx实现浏览器可实时查看访问日志的步骤详解

一.首先查看nginx版本,我使用的是1.9.7的版本,安装目录在/application/nginx-1.9.7 [root@AnSheng ~]# /application/nginx-1.9.7/sbin/nginx -V nginx version: nginx/1.9.7 built by gcc 4.4.7 20120313 (Red Hat 4.4.7-16) (GCC) configure arguments: --prefix=/application/nginx-1.9.7

Linux服务器nginx访问日志里出现大量http 400错误的请求分析

服务器中的错误记录类似于这种: 124.65.133.242 – – [27/Oct/2014:14:30:51 +0800] "-" 400 0 "-" "-" 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800] "-" 400 0 "-" "-" 124.65.133.242 – – [27/Oct/2014:14:31:45 +0800]

centos中nginx按日期自动分割访问日志的方法

Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息. 一条典型的Web访问日志如下: 复制代码 代码如下: 192.168.50.195 - - [17/Jun/2016:23:59:12 +0800] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; WOW64) Ap

Nginx日志实现访问异常报警详解

前言 在工作中为了防止一些恶意访问的行为,例如不断的请求刷流量,通过实时过滤Nginx访问日志,将单位时间内访问次数达到指定阀值的来源ip及时的通知系统管理员,这里通过邮件的方式通知. 监控脚本 vim /opt/nginx/sbin/nginx_log_monitor.sh #!/bin/bash #日志文件 logfile=/opt/nginx/logs/www #开始时间 start_time=`date -d"$last_minutes minutes ago" +"

shell脚本分析 nginx日志访问次数最多及最耗时的页面(慢查询)

当服务器压力比较大,跑起来很费力时候.我们经常做站点页面优化,会去查找那些页面访问次数比较多,而且比较费时. 找到那些访问次数高,并且比较耗时的地址,就行相关优化,会取得立竿见影的效果的. 下面是我在做优化时候,经常用到的一段shell 脚本. 这个也可以算是,统计web页面的slowpage 慢访问页面,象mysql slowquery . 以下是我的:nginx 配制 复制代码 代码如下: log_format  main  '$remote_addr - $remote_user [$ti

Python 分析Nginx访问日志并保存到MySQL数据库实例

使用Python 分析Nginx access 日志,根据Nginx日志格式进行分割并存入MySQL数据库.一.Nginx access日志格式如下: 复制代码 代码如下: $remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_f

Nginx自定义访问日志的配置方式

前言 Nginx日志主要分为两种:访问日志和错误日志.日志开关在Nginx配置文件(/etc/nginx/nginx.conf)中设置,两种日志都可以选择性关闭,默认都是打开的. 访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义.通过访问日志,你可以得到用户地域来源.跳转来源.使用终端.某个URL访问量等相关信息. 日志的重要性不言而喻,一般来说我们开发过程中会为每个项目定义自己的日志格式以及存储路径. 就我们普通的JAVAWEB项目来说,重要的日志一般输出并存放在Tomcat的

python正则分析nginx的访问日志

前言 本文的脚本是分析nginx的访问日志, 主要为了检查站点uri的访问次数的,检查的结果会提供给研发人员做参考,因为谈到分析嘛,那肯定要用到正则表达式了,所以请没有接触过正则的小伙伴自行补脑,因为涉及正则的内容,实在没法展开写,正则的内容太过庞大,根本不是一篇两篇能写清楚的. 开始前,我们先看看要分析的日志结构: 127.0.0.1 - - [19/Jun/2012:09:16:22 +0100] "GET /GO.jpg HTTP/1.1" 499 0 "http://

Nginx屏蔽F5心跳日志、指定IP访问日志

复制代码 代码如下: location / {  proxy_redirect off;  proxy_set_header Host $host;  proxy_set_header X-Real-IP $remote_addr;  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  proxy_pass http://mmt; if ( $remote_addr != 192.168.0.2 ) {   access_l

PHP 只允许指定IP访问(允许*号通配符过滤IP)

核心函数代码如下: /** * 检测访问的ip是否为规定的允许的ip * Enter description here ... */ function check_ip(){ $ALLOWED_IP=array('192.168.2.*','127.0.0.1','192.168.2.49'); $IP=getIP(); $check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组 #限制IP if(!in_array($IP,$ALLOWED_IP)) { for

通过ASP禁止指定IP和只允许指定IP访问网站的代码

一.禁止指定IP防问网站,并执行相应操作: 复制代码 代码如下: <% Dim IP,IPString,VisitIP '设置IP地址,用"|"隔开 IPString="|192.168.0.42|192.168.0.43|" '获取IP地址 IP = Request.ServerVariables("HTTP_X_FORWARDED_FOR") If IP = "" Then IP = Request.ServerVa

如何禁止指定指定IP访问我的计算机

使用IP策略,阻止该ip访问你的任何端口. 下边是方法:你用的是XP吧.应该是的,我就以XP来说! 打开:控制面版--管理工具-本地安全设置.点左边的 IP安全策略,在本地计算机. 然后在右边点右键--创建IP安全策略,打开IP安全策略向导. 下一步,出现IP安全策略名称,随便起个就行.比如叫 阻止192.168.1.163 下一步,出现激活默认响应规则,不要选中,把钩去掉. 下一步,选中编辑属性,完成. 然后出现了 IP安全策略属性,点下边的添加,出现规则属性,点击添加,出现IP策略器列表.把

Shell脚本配合iptables屏蔽来自某个国家的IP访问

星期六我们一位客户受到攻击,我们的网络监测显示有连续6小时的巨大异常流量,我们立即联系了客户,没有得到回应,我们修改和限制了客户的 VPS,使得个别 VPS 受攻击不会对整个服务器和其他 VPS 用户造成任何影响,我们一直保持这个 VPS 为开通状态(尽管一直受攻击),攻击又持续了24小时,星期天攻击仍在继续,我们忍无可忍,但是仍然无法联系到客户,我们向客户网站的另一负责人询问是否需要我们介入来帮助解决,这位负责人答应后我们立即投入到与 DDoS 的战斗中(我们动态扫描屏蔽坏 IP,现在客户网站

添加Nginx代理配置只允许内部IP访问的实现方法

location / { index index.jsp; proxy_next_upstream http_500 http_502 http_503 http_504 error timeout invalid_header; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $remote_addr; deny 192.168.1.1;

python写的一个squid访问日志分析的小程序

这两周组里面几位想学习python,于是我们就创建了一个这样的环境和氛围来给大家学习. 昨天在群里,贴了一个需求,就是统计squid访问日志中ip 访问数和url的访问数并排序,不少同学都大体实现了相应的功能,我把我简单实现的贴出来,欢迎拍砖: 日志格式如下: 复制代码 代码如下: %ts.%03tu %6tr %{X-Forwarded-For}>h %Ss/%03Hs %<st %rm %ru  %un %Sh/%<A %mt "%{Referer}>h"

windows服务器指定IP地址才能进行远程访问桌面设置方法

一般情况下分两种方法: 第一种是通过 防火墙来实现 等保测评要求:对服务器限制远程终端登录地址 于是有了:对于某一个服务器,要限定特定IP对其进行访问的需求. 因为存在:Windows server 2003.2008.2012及Linux这几种主流服务器. 我们分不同服务器来描述. Windows server 2003 1.Win键+R键,输入 Control 打开控制面板 2.找到 windows防火墙 3.常规选项卡中,选择 启用 4. 例外选项卡中,勾选 远程桌面-选中,点编辑-勾选T

分析nginx日志并屏蔽采集者ip(nginx屏蔽ip配置实例)

采集和防止采集是一个经久不息的话题,一方面都想搞别人的东西,另一方面不想自己的东西被别人搞走. 本文介绍如何利用nginx屏蔽ip来实现防止采集,当然也可以通过iptable来实现. 1.查找要屏蔽的ip 复制代码 代码如下: awk '{print $1}' nginx.access.log |sort |uniq -c|sort -n nginx.access.log 为日志文件, 会到如下结果,前面是ip的访问次数,后面是ip,很明显我们需要把访问次数多的ip并且不是蜘蛛的ip屏蔽掉,本例