您当前的位置:首页 > 电脑百科 > 站长技术 > 服务器

Nginx日志配置经验分享

时间:2021-03-04 09:56:04  来源:  作者:

关于Nginx 日志

Nginx 日志分为两种,一种是错误日志(error log),记录 Nginx 运行过程中遇到的异常,一种是访问日志(access log),记录的是 WEB 服务被用户访问时留下的一些信息。例如哪些文件被访问过、Nginx 如何响应、用户使用的 IP 地址等等。

 

1 开启访问日志

要开启访问日志,在 nginx.conf 文件中的 http 或 server 字段添加以下参数:
access_log log_file log_format;
其中 log_file 为日志要保存的路径,log_format 为日志记录格式。记录格式可以采用默认,也可以在 http 字段中自定义:
log_format format_name 'set_of_variables_to_define_format';
其中 format_name 表示这个日志格式的名称,在引用时需要用到。set_of_variables_to_define_format 表示此日志格式所记录的信息及顺序。
访问日志格式详解可见此官方文档。
小提示:
• server 字段如果未设置访问日志,则该 server 访问日志会继承 http 字段中的设置。
• server 字段中的 location 字段也可单独设置访问日志。
• 每个字段中都可以设置多个不同格式的日志。

 

2 开启错误日志

要开启错误日志,在 nginx.conf 文件中 http 字段添加以下参数:
error_log log_file log_level;
其中 log_file 为日志要保存的路径,log_level 为要记录的日志级别,设置某个级别后,该级别及以上级别的错误日志都将被记录。
错误日志共分为 8 个级别,从高到低分别是:
• emerg: 紧急,可能导致服务不可用。
• alert: 告警,严重问题告警。
• crit: 严重,需要关注的严重问题。
• error: 错误,发生错误,例如某个页面处理错误。
• warn: 警示,可能需要关注的问题。
• notice: 通知,简单的通知日志,大多数情况下可以忽略。
• info: 信息,运行中的普通信息。
• debug: 调试,用于分析错误的调试信息。

 

3 日志按天或按月存放

通常配置情况下,Nginx 所有访问日志存放在同一个 log 文件中,时间一长,日志文件将变得巨大,导致备份、分析都不方便。因此需要将日志按一定时间间隔分开存放,例如每天、每月或其它时间间隔。要实现这个目的主要由两种方式:
• 一种是在 nginx.conf 配置文件中进行配置
• 一种是使用系统定时任务脚本定期对日志进行分割

3.1 在 nginx.conf 中配置日志存放规则

在这里,我们需要用到 map 指令,map 指令是由 ngx_http_map_module 模块提供的,默认情况下安装 nginx 都会安装该模块。map 指令只能位于 nginx.conf 的 http 字段内。具体代码如下:

http {
......
......

#设置日志按日期或月份滚动
map $time_iso8601 $year {
default 'date';
'~^(?<yyyy>d{4})-' $yyyy;
}

map $time_iso8601 $month {
default 'not';
'~^d{4}-(?<mm>d{2})-' $mm;
}

map $time_iso8601 $day {
default 'found';
'~^d{4}-d{2}-(?<dd>d{2})' $dd;
}

#日志按年-月-日名称格式存放
#map $time_iso8601 $logfile_date {
# default 'date-not-found';
# '~^(?<year>d{4})-(?<month>d{2})-(?<day>d{2})' $year-$month-$day;
#}

#日志按年-月名称格式存放
map $time_iso8601 $logfile_month {
default 'date-not-found';
'~^(?<year>d{4})-(?<month>d{2})' $year-$month;
}
}

 

使用 map 定义好变量之后,即可在配置访问日志记录时使用该变量:
access_log logs/$logfile_month.access.log;
access_log 指令可以在 http 字段内,也可以在 server 字段内。
配置好后,如果遇到日志文件并没有生成的问题,则可能是 logs 目录权限导致,需要赋予 logs 目录 nginx 启动用户的权限(这是在日志路径中使用变量的一些限制,参考官方:Nginx 日志模块说明)。假设 nginx 以 www 组的 www 用户启动,则:
chown -R www:www logs/
最终生成的日志效果如下:

「干货」Nginx日志配置经验分享

 


「干货」Nginx日志配置经验分享

 


关于在日志路径中使用变量的限制,包括:
日志文件路径可以包含变量 (0.7.6+),但这类设置存在以下限制:
• 启动 Nginx worker 进程的用户必须拥有日志目录的写权限;
• 写缓存将不起作用;
• 每条日志写入都会造成日志文件的打开和关闭。然而,由于频繁读写的文件的文件描述符可能会被存储与缓存中,根据 open_log_file_cache 指令的时间参数设置,日志可能继续写入到旧文件中;
• 每条日志写入时都会检测站点根目录是否存在,如果不存在则日志不会创建,因此最好在 access_log 设置的同级别指令段中指定站点根目录,例如:

server {
root /spool/vhost/data/$host;
access_log /spool/vhost/logs/$host;
...


也有使用 if 判断语句来定义上面的变量,但据说可能引发问题,建议使用 map 指令。

3.2 通过定时脚本分割日志

创建日志分割脚本 splitLog.sh :
# /bin/bash
# 日志保存位置
base_path='/usr/local/nginx/logs/'
# 获取当前年信息和月信息
log_path=$(date -d yesterday +"%Y%m")
# 获取昨天的日信息
day=$(date -d yesterday +"%d")
# 按年月创建文件夹
mkdir -p $base_path/$log_path
# 备份昨天的日志到当月的文件夹
mv $base_path/access.log $base_path/$log_path/access_$day.log
# 输出备份日志文件名
# echo $base_path/$log_path/access_$day.log
# 通过Nginx信号量控制重读日志
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
添加linux定时任务:
crontab -e
# 每天0时1分进行日志分割(建议在02-04点之间,系统负载小)
01 00 * * * /usr/local/nginx/logs/splitLog.sh
重启Linux定时任务:
crond restart
如果提示以下错误 crond: can't lock /var/run/crond.pid, otherpid may be 4141:资源暂时不可用,删除 /var/run/crond.pid 重新执行命令即可。

 

作者:李凌



Tags:Nginx日志   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
最近客户有个新需求,就是想查看网站的访问情况,由于网站没有做google的统计和百度的统计,所以访问情况,只能通过日志查看,通过脚本的形式给客户导出也不太实际,给客户写个简单的页...【详细内容】
2021-10-09  Tags: Nginx日志  点击:(48)  评论:(0)  加入收藏
关于Nginx 日志Nginx 日志分为两种,一种是错误日志(error log),记录 Nginx 运行过程中遇到的异常,一种是访问日志(access log),记录的是 WEB 服务被用户访问时留下的一些信息。例如...【详细内容】
2021-03-04  Tags: Nginx日志  点击:(195)  评论:(0)  加入收藏
由于nginx功能强大,性能突出,越来越多的web应用采用nginx作为http和反向代理的web服务器。而nginx的访问日志不管是做用户行为分析还是安全分析都是非常重要的数据源之一。如...【详细内容】
2020-11-17  Tags: Nginx日志  点击:(115)  评论:(0)  加入收藏
本文以api.mingongge.com.cn域名为测试对象进行统计,日志为crm.mingongge.com.cn和risk.mingongge.com.cn请求之和(此二者域名不具生产换环境统计意义),生产环境请根据具体需...【详细内容】
2020-06-12  Tags: Nginx日志  点击:(57)  评论:(0)  加入收藏
此脚本是参考nmgxy/klionsec修改而来,重新添加了一些特征,只用来临时救急,还是推荐到ELK或者Splunk中分析Github:https://github.com/al0ne/nginx_log_check 功能 统计Top...【详细内容】
2020-02-24  Tags: Nginx日志  点击:(65)  评论:(0)  加入收藏
一:作用Ngx_http_log_module:定义日志格式,并且以指定的格式保存。二:示例配置log_format compression &#39;$remote_addr - $remote_user [$time_local] &#39; &#39;"$request...【详细内容】
2019-10-09  Tags: Nginx日志  点击:(111)  评论:(0)  加入收藏
▌简易百科推荐
阿里云镜像源地址及安装网站地址https://developer.aliyun.com/mirror/centos?spm=a2c6h.13651102.0.0.3e221b111kK44P更新源之前把之前的国外的镜像先备份一下 切换到yumcd...【详细内容】
2021-12-27  干程序那些事    Tags:CentOS7镜像   点击:(1)  评论:(0)  加入收藏
前言在实现TCP长连接功能中,客户端断线重连是一个很常见的问题,当我们使用netty实现断线重连时,是否考虑过如下几个问题: 如何监听到客户端和服务端连接断开 ? 如何实现断线后重...【详细内容】
2021-12-24  程序猿阿嘴  CSDN  Tags:Netty   点击:(12)  评论:(0)  加入收藏
一. 配置yum源在目录 /etc/yum.repos.d/ 下新建文件 google-chrome.repovim /etc/yum.repos.d/google-chrome.repo按i进入编辑模式写入如下内容:[google-chrome]name=googl...【详细内容】
2021-12-23  有云转晴    Tags:chrome   点击:(7)  评论:(0)  加入收藏
一. HTTP gzip压缩,概述 request header中声明Accept-Encoding : gzip,告知服务器客户端接受gzip的数据 response body,同时加入以下header:Content-Encoding: gzip:表明bo...【详细内容】
2021-12-22  java乐园    Tags:gzip压缩   点击:(8)  评论:(0)  加入收藏
yum -y install gcc automake autoconf libtool makeadduser testpasswd testmkdir /tmp/exploitln -s /usr/bin/ping /tmp/exploit/targetexec 3< /tmp/exploit/targetls -...【详细内容】
2021-12-22  SofM    Tags:Centos7   点击:(7)  评论:(0)  加入收藏
Windows操作系统和Linux操作系统有何区别?Windows操作系统:需支付版权费用,(华为云已购买正版版权,在华为云购买云服务器的用户安装系统时无需额外付费),界面化的操作系统对用户使...【详细内容】
2021-12-21  卷毛琴姨    Tags:云服务器   点击:(6)  评论:(0)  加入收藏
参考资料:Hive3.1.2安装指南_厦大数据库实验室博客Hive学习(一) 安装 环境:CentOS 7 + Hadoop3.2 + Hive3.1 - 一个人、一座城 - 博客园1.安装hive1.1下载地址hive镜像路径 ht...【详细内容】
2021-12-20  zebra-08    Tags:Hive   点击:(9)  评论:(0)  加入收藏
以下是服务器安全加固的步骤,本文以腾讯云的CentOS7.7版本为例来介绍,如果你使用的是秘钥登录服务器1-5步骤可以跳过。1、设置复杂密码服务器设置大写、小写、特殊字符、数字...【详细内容】
2021-12-20  网安人    Tags:服务器   点击:(7)  评论:(0)  加入收藏
项目中,遇到了一个问题,就是PDF等文档不能够在线预览,预览时会报错。错误描述浏览器的console中,显示如下错误:nginx代理服务报Mixed Content: The page at ******** was loaded...【详细内容】
2021-12-17  mdong    Tags:Nginx   点击:(7)  评论:(0)  加入收藏
转自: https://kermsite.com/p/wt-ssh/由于格式问题,部分链接、表格可能会失效,若失效请访问原文密码登录 以及 通过密钥实现免密码登录Dec 15, 2021阅读时长: 6 分钟简介Windo...【详细内容】
2021-12-17  LaLiLi    Tags:SSH连接   点击:(16)  评论:(0)  加入收藏
最新更新
栏目热门
栏目头条