如何在 Ubuntu VPS 的 Nginx 中配置日志记录和日志轮换

介绍

为了节省自己与您的Web服务器的一些麻烦,您可以配置日志。在您的服务器上的日志信息为您提供访问数据,这将有助于您解决问题并评估情况,因为它们出现。在本教程中,您将检查Nginx的日志功能,并发现如何配置这些工具以更好地满足您的需求。您将使用Ubuntu 22.04虚拟私人服务器作为一个例子,但任何现代分布都应该以类似的方式工作。

前提条件

要遵循本教程,您将需要:

随着 Nginx 在 Ubuntu 22.04 服务器上运行,您已经准备好开始。

了解错误_日志指令

Nginx 使用几种不同的指令来控制系统日志,其中包含的核心模块称为error_log

error_log 语法

error_log指令用于处理日志通用错误消息. 如果您熟悉Apache,这与Apache的ErrorLog指令非常相似. error_log指令适用以下语法:

1[label /etc/nginx/nginx.conf]
2error_log log_file log_level

log_file指定了将日志写入的文件,而log_level则指定了您想要记录的最低日志级别。

记录级别

error_log指令可以配置为根据需要记录更多或更少的信息。

  • `erg': 系统处于无法使用状态的紧急情况。
  • `警报 ' :需要迅速采取行动的严重情况。
  • " 实质 " :需要解决的重要问题。
  • " 错误 " : 发生了错误, 有些事没有成功 。
  • `警告': 出乎人们的意料,
  • `通知 ' : 正常的,但值得注意的是发生了什么。
  • `信息': 信息信息 也许是好消息
  • 调试: 调试可用于确定问题发生地的信息 。 .

列表中的更高级别被认为是更高的优先级别。如果您指定一个级别,日志会捕捉到该级别,而任何高于指定级别的级别。例如,如果您指定错误,日志会捕捉标记为错误,危机,警告出现的消息。 使用此指令的例子是在主配置文件中。 使用您偏好的文本编辑器访问下面的配置文件。

1sudo nano /etc/nginx/nginx.conf

将文件滚到# 日志设置部分,并注意以下指令:

1[label /etc/nginx/nginx.conf]
2. . .
3##
4# Logging Settings
5##
6
7access_log /var/log/nginx/access.log;
8error_log /var/log/nginx/error.log;
9. . .

如果您不希望error_log记录任何内容,则必须将输出发送到/dev/null:

1[label /etc/nginx/nginx.conf]
2. . .
3error_log /dev/null crit;
4. . .

另一个日志指令,‘access_log’,将在下一节中讨论。

理解HttpLogModule日志指令

虽然error_log指令是核心模块的一部分,但access_log指令是HttpLogModule的一部分。

《log_format 指令》

log_format指令用于用简单文本和变量来描述日志条目的格式。

有一种格式是与 Nginx 预定义的,称为组合

以下是组合格式的例子,如果它不是内部定义的,并且需要用log_format指令来指定:

1[label /etc/nginx/nginx.conf]
2log_format combined '$remote_addr - $remote_user [$time_local]  '
3    	    '"$request" $status $body_bytes_sent '
4    	    '"$http_referer" "$http_user_agent"';

这个定义涵盖了多个行,直到它找到半列(;)。

以美元符号(‘$’)开头的行表示变量,而像‘-,‘[,和‘]’这样的字符被解读成字面。

1[label /etc/nginx/nginx.conf]
2log_format format_name string_describing_formatting;

您可以使用由核心模块支持的变量(http://nginx.org/en/docs/http/ngx_http_core_module.html# variables)来制定您的日志字符串。

了解access_log指令

access_log指令使用类似于error_log指令的语法,但更灵活,用于配置自定义日志。

1[label /etc/nginx/nginx.conf]
2access_log /path/to/log/location [ format_of_log buffer_size ];

access_log的默认值是组合格式,在log_format部分中提到。您可以使用任何由log_format定义的格式。缓冲尺寸是 Nginx 在将其全部写入日志之前所保留的最大数据大小。您还可以通过在定义中添加gzip来指定日志文件的压缩:

1[label /etc/nginx/nginx.conf]
2access_log /path/to/log/location format_of_log gzip;

error_log指令不同,如果您不希望登录,您可以通过在配置文件中更新它来关闭它:

 1[label /etc/nginx/nginx.conf]
 2. . .
 3##
 4# Logging Settings
 5##
 6
 7access_log off;
 8error_log /var/log/nginx/error.log;
 9
10. . .

在这种情况下,不需要写 `/dev/null。

管理日志旋转

随着日志文件的增长,需要管理日志机制,以避免填充磁盘空间。 Log rotation 是关闭日志文件并可能存档旧文件的过程。

手动日志旋转

要手动旋转日志,您可以创建一个脚本来旋转它们. 例如,将当前日志移动到一个新的文件中进行存档。 一个常见的方案是用.0的口号命名最新的日志文件,然后用.1命名较旧的文件,等等:

1mv /path/to/access.log /path/to/access.log.0

实际旋转日志的命令是:kill -USR1 /var/run/nginx.pid 这不会杀死 Nginx 过程,而是发送信号,使其重新加载日志文件。

1kill -USR1 `cat /var/run/nginx.pid`

The /var/run/nginx.pid file is where Nginx stores the master process's PID. It is specified at the top of the /etc/nginx/nginx.conf configuration file with the line that begins with pid:

1sudo nano /etc/nginx/nginx.conf
1[label /etc/nginx/nginx.conf]
2user www-data;
3worker_processes auto;
4pid /run/nginx.pid;
5include /etc/nginx/modules-enabled/*.conf;
6...

旋轉後,執行「睡眠1」以允許流程完成轉移,然後您可以將舊檔案 zip 或做任何您喜歡的後旋轉流程:

1sleep 1
2[ post-rotation processing of old log file ]

logrotate进行日志旋转

logrotate应用程序是一个用于旋转日志的程序. 它默认安装在Ubuntu上,而Ubuntu上的Nginx配有自定义的logrotate脚本。 使用您偏好的文本编辑器访问旋转脚本。

1sudo nano /etc/logrotate.d/nginx

文件的第一行指定了下列行将适用于的位置. 如果您在 Nginx 配置文件中更改日志位置,请记住这一点。 文件的其余部分指定了日志将每天旋转,将保留 52 个较旧的副本。

1[label /etc/logrotate.d/nginx]
2. . .
3postrotate
4    [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
5endscript
6. . .

此部分告诉 Nginx 完成旋转后重新加载日志文件。

结论

适当的日志配置和管理可以在服务器出现问题时节省你的时间和精力. 获得帮助你诊断问题的信息 可能是小问题和长期头痛的区别

必须注意服务器日志,以维持一个功能性网站,并确保不暴露敏感信息。 本指南仅介绍您在伐木方面的经验。 您可以在 [如何解决常见的 Nginx 错误] (digital Ocean.com/com/community/tourics/ how-to-trouble shoot-common-nginx-errors) 的教程中学习更多一般的提示 .

Published At
Categories with 技术
comments powered by Disqus