一、介绍
Nginx是一款非常流行的Web服务器和反向代理服务器软件。默认情况下,Nginx将所有的访问日志记录到单个文件中。但是对于高流量的网站,可以把日志文件按天分割,方便管理和分析。
本文将会介绍如何使用Nginx按天生成日志文件,并且提供完整的配置代码样例。
二、按天生成日志文件
在Nginx的配置文件中,可以通过配置access_log指令来指定访问日志记录的文件路径和格式。可以使用$符号来定义文件名和格式中的变量,并且Nginx支持时间格式化函数。因此,我们可以通过在文件名中加入时间变量的方式来实现按天生成日志文件。
access_log /var/log/nginx/access.log.$time_iso8601 main;
在上面的配置中,$time_iso8601变量表示当前时间的ISO 8601格式,如2021-09-01T21:30:00+00:00。因此,Nginx会自动在每个ISO 8601格式发生变化的时间点创建新的日志文件,并将对应的日志记录写入到新文件中。
三、自动清理旧日志文件
如果不对旧的日志文件进行清理,日志文件将会不断增长占用大量磁盘空间。为了避免这个问题,可以使用Linux系统自带的logrotate工具来自动清理日志文件。
logrotate是一个可以根据一定条件自动将旧日志文件归档和删除的工具。可以通过在配置文件中定义归档和删除的条件来控制logrotate的行为。下面是一个可以用来清理Nginx按天生成的日志文件的logrotate配置文件样例:
/var/log/nginx/access.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/sbin/service nginx reload > /dev/null endscript }
- daily:按日进行归档
- missingok:如果日志文件不存在,则忽略错误
- rotate 7:保留最近7个归档文件,并删除更早的文件
- compress:使用gzip进行压缩
- delaycompress:延迟压缩,下一次轮换时再压缩
- notifempty:如果日志文件为空,则不进行轮换
- create 0640 www-data adm:新创建的归档日志文件属性,属主为www-data,属组为adm,权限为rw-r-----
- sharedscripts:轮换后只执行一次postrotate脚本
- postrotate:轮换后要执行的命令。这里使用service命令重载Nginx配置
四、完整的配置文件样例
下面是一个完整的Nginx配置文件样例,用于按天生成日志文件并且使用logrotate对旧日志文件进行清理:user www-data; worker_processes auto; pid /run/nginx.pid; events { worker_connections 1024; # ... } http { log_format main '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"'; access_log /var/log/nginx/access.log.$time_iso8601 main; # ... } # logrotate配置文件 /var/log/nginx/access.log { daily missingok rotate 7 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate /usr/sbin/service nginx reload > /dev/null endscript }
五、总结
本文介绍了如何使用Nginx按天生成日志文件,并且使用logrotate对旧日志文件进行清理。例如可以指定以ISO 8601格式进行文件名的配置,以及在logrotate配置文件中指定保留多少个日志文件和进行轮换的时间条件。以上方法可以帮助Nginx和服务器管理员更好地管理日志文件,方便后期的数据分析和故障排查。