参考资料
[1]. 跟老男孩学Linux运维:Web集群实战,老男孩
安装过程
编写脚本脚本实现Nginx access日志轮询
Nginx目前没有类似Apache的通过cronlog或者rotatelog对日志分割处理的能力,但是,运维人员可以通过利用脚本开发、Nginx的信号控制功能或reload重新加载,来实现日志自动切割,轮询。
1.1 配置日志切割脚本
mkdir -p /server/scripts/
cd /server/scripts/
vim cut_nginx_log.sh
#将日志按日志日期改成前一天的名称
cd /application/nginx/logs &&\
/bin/mv www_access.log www_access_$(data +%F -d -1dy).log
#重新加载nginx使得重新生成访问日志文件
/application/nginx/sbin/nginx -s reload
将这段脚本保存后加入到定时任务,设置每天凌晨0点进行切割日志
crontab -e
###cut nginx access log
00 00 * * * /bin/sh /server/scripts/cut_nginx.log.sh >/dev/null 2>&1
解释:每天0点执行cut_nginx_log.sh脚本,>/dev/null 2>&1 表示任何输出都不要,将脚本的输出重定向到空。
不记录不需要的访问日志
对于负载均衡器健康节点检查或某些特定文件(比如图片、js、css)的日志,一般不需要记录下来,因为在统计PV时是按照页面计算的。而且日志写入太频繁会大量消耗磁盘I/O,降低服务的性能。
具体配置如下:
location ~.*\.(js|jpg|JPG|jpeg|JPEG|css|bmp|gif|GIF)$ {
access_log off;
}
这里用location标签匹配不记录日志的元素扩展名,然后关掉了日志。
访问日志的权限设置
假如日志目录为/app/logs,则授权方法为:
chown -R root.root /app/logs
chmod -R 700 /app/logs
不需要在日志目录上给Nginx用户读或写许可,否则会造成安全隐患。