介绍
为了节省自己与您的Web服务器的一些麻烦,您可以配置日志。在您的服务器上的日志信息为您提供访问数据,这将有助于您解决问题并评估情况,因为它们出现。在本教程中,您将检查Nginx的日志功能,并发现如何配置这些工具以更好地满足您的需求。您将使用Ubuntu 22.04虚拟私人服务器作为一个例子,但任何现代分布都应该以类似的方式工作。
前提条件
要遵循本教程,您将需要:
- 一個 Ubuntu 22.04 伺服器與非 根
sudo
功能的使用者與防火牆. 遵循我們的 初始伺服器設定開始。 * Nginx 安裝在伺服器上。 遵循我們的 如何安裝 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) 的教程中学习更多一般的提示 .