聊聊配置 Nginx 访问与错误日志的问题


Posted in Servers onMay 25, 2022

Nginx是一个开放源代码的高性能HTTP和反向代理服务器,负责处理Internet上某些最大站点的负载。在管理NGINX网络服务器时,你要执行的最常见任务之一就是检查日志文件。

在对服务器或应用程序问题进行故障排除时,知道如何配置和读取日志非常有用,因为它们提供了详细的调试信息。

Nginx用两种类型的日志记录其事件:访问日志和错误日志。访问日志记录有关客户端请求的信息,错误日志记录有关服务器和应用程序问题的信息。

本教程概述了如何配置和读取Nginx访问和错误日志。配置Nginx访问日志的格式与位置,配置错误日志格式与位置,默认的日志文件所在位置,读取和理解Nginx日志文件每个字段。

配置Nginx访问日志

每当处理客户请求时,Nginx都会在访问日志中生成一个新记录。每个事件记录都包含一个时间戳,并包含有关客户端和所请求资源的各种信息。访问日志可以显示访问者的位置,访问者的访问的页面等。

log_format 指令允许你定义记录日志的格式。 access_log 指令启用并设置日志文件的位置和使用的格式。

access_log 指令的最基本语法如下:

access_log log_file log_format;

其中 log_file 是日志文件的完整路径, log_format 是日志文件使用的格式。可以在 http , server 或 location 指令的上下文中启用访问日志。

默认情况下,Nginx主配置文件中的 http 指令配置了全局访问日志格式。

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
}

/etc/nginx/nginx.conf

为获得更好的可维护性,建议为每个服务器设置一个单独的访问日志文件。在 server 指令中设置的 access_log 指令将覆盖在 http 指令中设置的 access_log 。

http {
  ...
  access_log  /var/log/nginx/access.log;
  ...
  server {
    server_name domain.com
    access_log  /var/log/nginx/domain.access.log;
    ...
  }
}

/etc/nginx/conf.d/domain.com.conf

如果未指定日志格式,Nginx将使用预定义的combined组合格式,如下所示:

log_format combined '$remote_addr - $remote_user [$time_local] '
                    '"$request" $status $body_bytes_sent '
                    '"$http_referer" "$http_user_agent"';

要更改日志记录格式,请覆盖默认设置或定义一个新设置。例如,定义一个名为 main 的新日志记录格式,它将用添加 X-Forwarded-For header的值来扩展 combined 格式,在 http 或 server 中添加以下定义指令:

log_format  custom  '$remote_addr - $remote_user [$time_local] "$request" '
                    '$status $body_bytes_sent "$http_referer" '
                    '"$http_user_agent" "$http_x_forwarded_for"';

要使用新日志格式,请在日志文件后指定其名称,如下所示:

access_log  /var/log/nginx/access.log custom;

虽然访问日志提供了非常有用的信息。但它会占用磁盘空间,并可能影响服务器性能。如果服务器资源不足,并且网站繁忙,则可能要禁用访问日志。为此,请将 access_log 伪指令的值设置为 off 。理论上你不会出现这种情况,Nginx会自动删除前期的日志文件:

access_log off;

配置错误日志

Nginx将应用程序和常规服务器错误的消息写入错误日志文件。如果你在Web应用程序中遇到错误,则错误日志是你开始进行排查问题的第一个位置。 error_log 指令启用并设置错误日志的位置和严重性级别。它采用以下格式,可以在 http , server 或 location 上下文中进行设置:

error_log log_file log_level

log_level 参数设置日志记录级别。以下是按严重性从低到高列出的级别:

debug
info
notice
warn
error
crit
alert
emerg

每个日志级别包括更高级别。例如,如果你将日志级别设置为 warn ,则Nginx还将记录 error , crit , alert 和 emerg 消息。未指定 log_level 参数时,默认为 error 。默认情况下, error_log 指令在主nginx.conf文件内的 http 指令上下文中定义:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...
}

/etc/nginx/nginx.conf与访问日志相同,建议为每个服务器设置一个单独的错误日志文件,该文件将覆盖更高级别的设置如http指令上下文。例如,要将domain.com的错误日志设置为 warn ,你可以使用:

http {
  ...
  error_log  /var/log/nginx/error.log;
  ...

  server {
    server_name domain.com
    error_log  /var/log/nginx/domain.error.log warn;
    ...
  }
}

无论何时修改配置文件,都必须重新加载Nginx服务,以使更改生效。

日志文件的位置

在大多数Linux发行版中,例如Ubuntu ,CentOS和Debian。默认情况下,访问和错误日志位于 /var/log/nginx 目录中。

读取和理解Nginx日志文件

你可以使用 cat , less , grep , cut , awk 等命令打开和解析nginx日志文件。以下是使用默认的Nginx日志格式的访问日志文件的记录:

192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1" 200 396 "-" "Mozilla/0 (X11; Linux x86_64) AppleWebKit/536 (KHTML, like Gecko) Chrome/38120 Safari/536"

让我们细分Nginx日志文件记录的每个字段意味着什么:

  • $remote_addr – 192.168.33.1 -发出请求的客户端的IP地址。
  • $remote_user  – - -HTTP身份验证用户。未设置用户名时,此字段显示 - 。
  • [$time_local] – [15/Oct/2019:19:41:46 +0000]

本地服务器时间。

  • "$request"  – "GET / HTTP/1.1" -请求类型,路径和协议。
  • $status  – 200 -服务器响应代码。
  • $body_bytes_sent  – 396 -服务器响应的大小(以字节为单位)。
  • "$http_referer"  – "-" -引荐网址。
  • "$http_user_agent"  – Mozilla/5.0 ... -客户端的用户代理(网络浏览器)。

使用 tail 命令实时观看日志文件记录: tail -f access.log

到此这篇关于配置 Nginx 访问与错误日志的文章就介绍到这了!


Tags in this post...

Servers 相关文章推荐
Nginx反向代理多个服务器的实现方法
Mar 31 Servers
Linux中Nginx的防盗链和优化的实现代码
Jun 20 Servers
nginx配置虚拟主机的详细步骤
Jul 21 Servers
深入解析Apache Hudi内核文件标记机制
Mar 31 Servers
Dashboard管理Kubernetes集群与API访问配置
Apr 01 Servers
关于windows server 2012 DC 环境 重启后蓝屏代码:0xc00002e2的问题
May 25 Servers
Nginx静态压缩和代码压缩提高访问速度详解
May 30 Servers
winserver2019安装软件一直卡在应用程序正在为首次使用做准备
Jun 10 Servers
搭建zabbix监控以及邮件报警的超级详细教学
Jul 15 Servers
Nginx 502 bad gateway错误解决的九种方案及原因
Aug 14 Servers
修改Nginx配置返回指定content-type的方法
Sep 23 Servers
windows server2012 R2下安装PaddleOCR服务的的详细步骤
Sep 23 Servers
利用nginx搭建RTMP视频点播、直播、HLS服务器
详解Nginx的超时keeplive_timeout配置步骤
May 25 #Servers
nginx 配置指令之location使用详解
May 25 #Servers
zabbix配置nginx监控的实现
May 25 #Servers
nginx 添加http_stub_status_module模块
May 25 #Servers
docker 制作mysql镜像并自动安装
May 20 #Servers
阿里云服务器Ubuntu 20.04上安装Odoo 15
May 20 #Servers
You might like
在PHP中利用XML技术构造远程服务(下)
2006/10/09 PHP
一个简单的网页密码登陆php代码
2012/07/17 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
在Yii2中使用Pjax导致Yii2内联脚本载入失败的原因分析
2016/03/06 PHP
『jQuery』取指定url格式及分割函数应用
2013/04/22 Javascript
关于JS数组追加数组采用push.apply的问题
2014/06/09 Javascript
JavaScript中的apply和call函数详解
2014/07/20 Javascript
jQuery Easyui Tabs扩展根据自定义属性打开页签
2016/08/15 Javascript
JS实现获取当前URL和来源URL的方法
2016/08/24 Javascript
利用Javascript仿Excel的数据透视分析功能
2016/09/07 Javascript
JS获取年月日时分秒的方法分析
2016/11/28 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
小程序二次贝塞尔曲线实现购物车商品曲线飞入效果
2019/01/07 Javascript
详解微信UnionID作用
2019/05/15 Javascript
[01:02:25]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS VG
2014/05/25 DOTA
[05:04]DOTA2上海特级锦标赛主赛事第二日TOP10
2016/03/04 DOTA
Python Web框架Pylons中使用MongoDB的例子
2013/12/03 Python
在Python中操作列表之List.append()方法的使用
2015/05/20 Python
Python实现读写sqlite3数据库并将统计数据写入Excel的方法示例
2017/08/07 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
Python3获取cookie常用三种方案
2020/10/05 Python
IE10 Error.stack 让脚本调试更加方便快捷
2013/04/22 HTML / CSS
Html5新增标签有哪些
2017/04/13 HTML / CSS
简约控的天堂:The Undone
2016/12/21 全球购物
Charles & Keith欧盟:新加坡时尚品牌
2019/08/01 全球购物
车贷收入证明范本
2014/01/09 职场文书
怎样写好创业计划书的内容
2014/02/06 职场文书
房地产营销策划方案
2014/02/08 职场文书
工作态度不好检讨书
2015/05/06 职场文书
刑事案件上诉状
2015/05/23 职场文书
2016入党积极分子党课学习心得体会
2015/10/09 职场文书
2016拓展训练心得体会范文
2016/01/12 职场文书
神州牡丹园的导游词
2019/11/20 职场文书
Go语言使用select{}阻塞main函数介绍
2021/04/25 Golang
vue使用节流函数的踩坑实例指南
2021/05/20 Vue.js