nginx日志的配置及切割

nginx日志的配置及切割,第1张

nginx的log_format可以自主选择参数用于指示服务器的活动状态,默认的是:

假设将nginx服务器作为web服务器,位于负载均衡设备,nginx反向代理之后,不能获取到客户端的真实ip地址了。

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

语法:access_log path [format [buffer=size [flush=time]]]

配置段:

gzip压缩等级

buffer设置内存缓存区大小

flush保存在缓存去中的最长时间

不记录日志:access_log off

使用默认combined格式记录日志:access_log logs/access.log 或access_log logs/access.log combined

注意:nginx进程设置的用户和组必须对日志路径有创建文件的权限,否则报错。

此外,对于每一条日志记录,都将是先打来文件,再写入日志,然后关闭,可以使用open_log_file_cache来设置日志文件缓存(默认是off)。

系统自动切割,利用linux操作系统的定时任务,执行sh脚本,来完成日志的自动切割。

nginx的log日志分为access log 和 error log

access log :记录了哪些用户,哪些页面以及用户浏览器、ip和其他的访问信息

error log :是记录服务器错误日志

access.log日志的形式如下:

其实nginx access日志的格式不是一成不变的,是可以自定义的。

在nginx的nginx.conf配置文件找到:log_format 这里就是日志的格式

看一下和上述日志匹配的log格式设置:

配置access log日志的存储位置及文件,注意:access.log文件是可以按日期进行分割的,方便查看及处理

服务器上nginx的日志体积日益增大,已经到了打开都要加载很久的地步了,无法忍受,想配置日志按天保存,方便查看。网上搜了一下,基本有两种思路:

主要思路是写一个定时任务脚本,每天特定时间把现在的日志重命名,XXXX2021-01-05.log,然后 nginx -s reopen 重启nginx来实现目的。

考虑了一下nginx重启会导致线上项目服务终止影响用户体验,所以放弃了。

通过nginx.conf配置来实现自动化的按天保存日志,nginx无需重启,好处显而易见,我选择了这种方式实现。

$time_iso8601 是nginx 内嵌变量,可以用来获取当前时间,时间格式如下: 2018-09-21T16:01:02+02:00 。然后使用 正则表达式 来获取所需时间的数据。按yyyy-mm-dd格式获取当前日期的字符串,通过变量 $time 来设置日志文件名,这样当日期改变时,日志文件名就会更新,nginx会以新的文件名记录日志,实现按天保存日志的效果。

实现过程并不顺利,主要遇到了以下几个问题。

1. access_log 可以通过变量配置文件名,但是 error_log 用同样的方法配置后不生效,不过 error_log 的记录相对较少,目前还不是问题,暂时放弃。

2.保证日志目录可被 nginx 用户组有读写权限,这个踩坑了,配置后日志目录下没有出现日志,nginx.conf里配置的用户名是 nginx ,改了权限之后就可以正常生成了。


欢迎分享,转载请注明来源:夏雨云

原文地址:https://www.xiayuyun.com/zonghe/280949.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-21
下一篇2023-04-21

发表评论

登录后才能评论

评论列表(0条)

    保存