nginx日志处理

nginx的配置文件 /etc/nginx.conf文件中

定义Nginx的日志格式使用 log_format 这个配置项,默认的格式为:

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

如果将Nginx服务器作为web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,就不能获取到客户端的真实IP地址了。原因是经过反向代理后,由于在客户端和web服务器之间增加了中间层,

因此web服务器无法直接拿到客户端的IP,通过$remote_addr变量拿到的将是反向代理服务器的IP地址。但是反向代理服务器在转发请求的Http头信息中,可以增加X-Forwarded-For信息,用于记录原有的客户端IP地址和原来客户端请求的服务器地址。



为每一个虚拟站点保存日志(包括访问日志和错误日志)用 access_log 以及 error_log 这两个配置项

        access_log  /var/log/nginx/access.log  main;
        error_log   /var/log/nginx/error.log notice;

由于服务器上的日志一直处于增长中,我们需要保证磁盘空间,可以考虑只保留一周内的日志文件,另外,当日的日志文件不要太大,太大会引起磁盘读写效率问题。

所以这里写了一个shell脚本,用于删除一周前的日志文件以及将重新生成当天的日志文件,在每天凌晨执行该任务。

vim cut_nginx_log.sh

#!/bin/bash
#执行脚本删除一些访问日志和错误日志文件

#nginx log dir
logs_path="/var/log/nginx/"

rm -f ${logs_path}access_$(date -d "last week" +"%Y%m%d").log
rm -f ${logs_path}error_$(date -d "last week" +%Y%m%d").log
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log
mv ${logs_path}error.log ${logs_path}error_$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /var/run/nginx/nginx.pid`

Crontab的格式定义:

  第1列分钟1~59
第2列小时1~23(0表示子夜)
第3列日1~31
第4列月1~12
第5列星期0~6(0表示星期天)
第6列要运行的命令


crontab -e

00 00 * * * /bin/bash /usr/local/nginx/script/cut_nginx_log.sh

Ctrl+o保存 Ctrl+x退出

测试证明 上述脚本能满足要求。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值