当用户请求一个软件时,绝大多数软件都会记录用户的访问情况,Nginx服务也不例外。我们可以利用脚本开发、Nginx的信号控制功能或reload重新加载来实现日志的自动切割、轮询。

编写脚本实现Nginx access日志轮询

  1. 脚本内容如下

    mkdir -p /opt/logs/nginx_logs
    mkdir -p /opt/sh && cd /opt/sh && vim cut_nginx_log.sh # 写入如下内容
    	cd /opt/logs/nginx_logs &&\
    	/bin/mv /usr/local/nginx/logs/access.log ./access_$(date +%F -d -1day).log
    	/usr/local/nginx/sbin/nginx -s reload
    

    其实脚本的功能是修改日志文件名称,重新生成新的日志文件记录日志。

  2. 将这段脚本写入定时任务,让此脚本每天凌晨0点执行就可一实现日志每天分割功能,操作如下:

    crontab -e # 写入如下内容
    	# cut nginx access log file by luo
    	00 00 * * * /bin/bash /opt/sh/cut_nginx_log.sh > /dev/null 2>&1
    

    如上操作即可完成按照不同的日期生成切割日志。

不记录不需要的访问日志

  在实际工作中,对于某些特定文件比如图片、JS或CSS的日志,一般不需要记录下来,因为在统计PV时是按照页面计算的,而且日志写入太频繁会消耗大量的磁盘I/O,降低服务器的性能。
配置如下:

location ~ .*\.(jpg|JPG|jpeg|JPEG|gif|GIF|bmp|css|js)$ {
	access_log off;
}

这里使用location标签匹配不记录日志的元素拓展名,然后关掉日志。需要注意location在配置文件中的位置,否则可能不生效。

访问日志的权限设置

假如日志目录为 /opt/logs/nginx_logs,则授权方法为:

chown -R root.root /opt/logs/nginx_logs
chmod -R 700 /opt/logs/nignx_logs

注意:不需要在日志目录给Nignx用户读或者写权限。


最后编辑: 于 3年前

评论列表(0)

    暂无评论