如何在 Ubuntu VPS 上配置 Nginx 的日志记录和日志轮转

简介

为了避免在 Web 服务器上遇到麻烦,您可以配置日志记录。在服务器上记录信息可以让您访问数据,帮助您在出现问题时进行故障排除和评估情况。

在本教程中,您将了解 Nginx 的日志记录功能,并发现如何配置这些工具以最好地满足您的需求。我们将以 Ubuntu 22.04 虚拟专用服务器为例,但任何现代发行版都应该有类似的功能。

先决条件

要按照本教程操作,您需要:

  • 一个安装了防火墙的非root sudo-启用用户的 Ubuntu 22.04 服务器。请参考我们的《初始化服务器设置》进行开始。
  • 在服务器上安装了 Nginx。请参考我们的《如何在 Ubuntu 22.04 上安装 Nginx》教程进行安装。

在您的 Ubuntu 22.04 服务器上运行 Nginx 后,您就可以开始了。

理解 Error_log 指令

Nginx 使用几个不同的指令来控制系统日志记录。其中核心模块中包含的一个指令称为 error_log

error_log 语法

error_log 指令用于处理一般错误消息的记录。如果您熟悉 Apache,这与 Apache 的 ErrorLog 指令非常相似。

error_log 指令应用以下语法:

error_log log_file log_level

log_file 指定将记录写入的文件。log_level 指定您希望记录的最低日志级别。

记录级别

error_log 指令可以根据需要配置记录更多或更少的信息。记录级别可以是以下之一:

  • emerg:系统处于不可用状态的紧急情况。
  • alert:需要立即采取行动的严重情况。
  • crit:需要解决的重要问题。
  • error:发生错误,某些操作失败。
  • warn:发生了一些不寻常的情况,但不值得关注。
  • notice:正常的事情,但值得注意发生了什么。
  • info:可能值得了解的信息性消息。
  • debug:可以用于准确定位问题发生位置的调试信息。

列表中级别较高的级别被视为更高优先级。如果指定了级别,日志将捕获该级别及高于指定级别的任何级别的消息。

例如,如果指定了 error,日志将捕获标记为 errorcritalertemerg 的消息。

在主配置文件中使用此指令的示例位于以下位置。使用您喜欢的文本编辑器访问以下配置文件。此示例使用 nano

sudo nano /etc/nginx/nginx.conf

滚动文件到 # Logging Settings 部分,并注意以下指令:

. . .
##
# Logging Settings
##access_log /var/log/nginx/access.log;
error_log /var/log/nginx/error.log;
. . .

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

. . .
error_log /dev/null crit;
. . .

另一个日志记录指令 access_log 将在以下部分讨论。

理解 HttpLogModule 日志记录指令

虽然 error_log 指令是核心模块的一部分,但 access_log 指令是 HttpLogModule 的一部分。这提供了自定义日志的能力。

此模块包含几个其他指令,可帮助配置自定义日志。

log_format 指令

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

Nginx 预定义了一个称为 combined 的格式。这是许多服务器使用的常见格式。

以下是一个示例,如果内部未定义并且需要使用 log_format 指令指定 combined 格式:

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

此定义跨越多行,直到找到分号(;)。

以美元符号($)开头的行表示变量,而像 -[] 这样的字符被直接解释。

指令的一般语法是:

log_format format_name string_describing_formatting;

您可以使用核心模块支持的变量来构建您的日志字符串。

理解 access_log 指令

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

access_log 指令使用以下语法:

access_log /path/to/log/location [ format_of_log buffer_size ];

access_log 的默认值是 log_format 部分提到的 combined 格式。您可以使用任何由 log_format 定义定义的格式。

缓冲区大小是 Nginx 在将所有数据写入日志之前将保存的数据的最大大小。您还可以通过将 gzip 添加到定义中指定对日志文件进行压缩:

access_log /path/to/log/location format_of_log gzip;

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

. . .##
# 日志设置
##access_log off;
error_log /var/log/nginx/error.log;. . .

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

管理日志轮转

随着日志文件的增长,有必要管理日志机制,以避免填满磁盘空间。日志轮转 是切换日志文件并可能对旧文件进行一定时间的归档的过程。

Nginx 不提供管理日志文件的工具,但它包括辅助日志轮转的机制。

手动日志轮转

要手动轮转日志,可以创建一个脚本来轮转它们。例如,将当前日志移动到新文件进行归档。一个常见的方案是将最近的日志文件命名为 .0 的后缀,然后将较旧的文件命名为 .1,依此类推:

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

实际执行日志轮转的命令是 kill -USR1 /var/run/nginx.pid。这不会终止 Nginx 进程,而是向其发送一个信号,使其重新加载其日志文件。这将导致新请求被记录到刷新后的日志文件中:

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

/var/run/nginx.pid 文件是 Nginx 存储主进程 PID 的位置。它在 /etc/nginx/nginx.conf 配置文件的顶部用 pid 开头的行中指定:

sudo nano /etc/nginx/nginx.conf
user www-data;
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
...

轮转后,执行 sleep 1 以允许进程完成传输。然后可以对旧文件进行压缩或执行任何其他轮转后的处理:

sleep 1
[ 对旧日志文件进行轮转后处理 ]

使用 logrotate 进行日志轮转

logrotate 应用程序是用于轮转日志的程序。它默认安装在 Ubuntu 上,而 Ubuntu 上的 Nginx 自带一个自定义的 logrotate 脚本。

使用您喜欢的文本编辑器访问轮转脚本。此示例使用 nano

sudo nano /etc/logrotate.d/nginx

文件的第一行指定了后续行将应用的位置。如果您在 Nginx 配置文件中切换日志位置,请记住这一点。

文件的其余部分指定日志将每天轮转一次,并保留 52 个旧副本。

请注意,postrotate 部分包含类似于先前使用的手动轮转机制的命令:

. . .
postrotate[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
endscript
. . .

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

结论

适当的日志配置和管理可以在服务器出现问题时节省您的时间和精力。拥有帮助您诊断问题的信息可能是解决问题的关键,也可能是一个持续的头痛。

重要的是要密切关注服务器日志,以维护一个功能正常的站点,并确保您没有暴露敏感信息。本指南仅作为日志记录经验的介绍。您可以在我们的教程《如何排除常见的 Nginx 错误》中了解更多一般提示。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/756.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

社交媒体数据恢复:与你科技

在数字时代,数据是我们生活中的重要组成部分。无论是个人照片、文档,还是企业的重要资料,数据在我们的生活中扮演着举足轻重的角色。然而,数据丢失的问题时常发生,给我们带来了很多麻烦。幸运的是,当下众多…

UE4 拍摄、保存并浏览相册

效果: 1.新建CameraActor类 2.修改截图保存路径 3.编写BP_Camera蓝图 注意路径 Save Image函数要在执行拍照和BeginPlay事件执行一次 按钮执行拍摄事件 3.编写UMG蓝图 技巧:让Index加1、减1循环赋值 4.把BP_Camera挂在玩家上

步步精科技获得发明型专利,提升Type-C连接器行业竞争力

在电子科技日新月异的时代,连接器作为电子设备中不可或缺的一部分,其安全性、稳定性和性能水平直接关系到设备的使用效果和用户体验。深圳市步步精科技有限公司(以下简称“步步精科技”)一直致力于连接器领域的技术创新和产品研发…

Linux-pip安装升级

安装pip3 apt 或 apt-get 包管理器 sudo apt-get install python3-pip升级pip 对应的python升级自己的pip,注意python指的是python的哪个版本,如python2.7、python3.8等。 升级命令: python -m pip install --upgrade pip 或 python3 -m …

Ubuntu上阅读Android源码工具

由于Android源码过于庞杂,里面有多种语言源文件,想只用一IDE统一索引是不现实的。我个人便使用AS阅读JAVA代码,VS看C/C代码,在Ubuntu上不能使用SI,所以直接放弃。在framework开发这个层面上来讲,因为大部分…

vue中使用水印

1. 在utils下创建watermark.js const watermark {}/**** param {要设置的水印的内容} str* param {需要设置水印的容器} container* param {需要设置水印的每一块的宽度} canWidth* param {需要设置水印的每一块的高度} canHeight* param {需要设置水印的字体} canFont* para…

Qt - 窗口

目录 1. 前言 2. 菜单栏(QMenuBar) 2.1. 创建菜单栏 2.1.1. 方式一 2.1.2. 方式二 2.2. 在菜单栏中添加菜单和创建菜单项 2.3. 在菜单项之间添加分割线 2.4. 综合示例 3. 工具栏(QToolBar) 3.1. 创建工具栏 3.2. 设置停靠位置 3.2.1. 方式一 3.2.2. 方式二 3.3. 设…

服务器连接校园网

这里写目录标题 移动 :cPortal&alogin&callbackdr1003&login_method1&user_account%2C0%2C统一认证码%40cmcc&user_password密码&wlan_user_ip服务器ip&wlan_user_ipv6&wlan_user_mac000000000000&wlan_ac_ip&wlan_ac_name…

桥接模式【结构型模式C++】

1.概述 桥接模式是一种结构型设计模式,是用于把抽象化与实现化解耦,使得二者可以独立变化。这种类型的设计模式属于结构型模式,它通过提供抽象化和实现化之间的桥接结构,来实现二者的解耦。 这种模式涉及到一个作为桥接的接口&am…

游戏中的伤害类型

在许多角色扮演游戏(RPG)、多人在线战斗竞技场(MOBA)游戏以及其他类型的游戏中,伤害类型是决定攻击效果如何与目标互动的重要因素。通常,伤害类型分为物理伤害、魔法伤害和真实伤害。下面是这些伤害类型的详…

Opencv | 二值化操作

目录 一. 二值化操作1. cv.threshold ( ) 普通二值化2. cv2.adaptiveThreshold ( ) 自适应二值化2.1 大津法二值化操作2.2 高斯模糊大律法二值化操作 一. 二值化操作 1. cv.threshold ( ) 普通二值化 retval, dst cv.threshold(src, thresh, maxval, type[, dst])参数&#x…

go语言并发实战——日志收集系统(四) 利用tail包实现对日志文件的实时监控

Linux中的tail命令 tail 命令是一个在 Unix/Linux 操作系统上用来显示文件末尾内容的命令。它可以显示文件的最后几行内容,默认情况下显示文件的最后 10 行。tail 命令 非常有用,特别是在我们查看日志文件或者监视文件变化时。 基本用法如下&#xff1a…

Flume在大数据集群下的配置以及监控工具Ganglia的部署安装

前提:需要有三台虚拟机(hadoop102,103,104)配置好相关基础环境 安装 将安装包上传到/opt/software中 tar -zxf /opt/software/apache-flume-1.9.0-bin.tar.gz -C /opt/module/修改 apache-flume-1.9.0-bin 的名称为 flume mv /opt/module/…

element table加减列

// 有个特别注意的地方,下面这行代码,key一定绑的是item,千万不要绑定index,不然就会出现异常 //<el-table-column v-for"(item,index) in titleList" :key"item" min-width"150" align"center"><el-table fit :data"d…

从智能家居到智能城市:物联网中的隐私和安全风险

随着科技的不断进步&#xff0c;智能设备和物联网&#xff08;IoT&#xff09;技术已经逐渐渗透到我们的生活中。从智能家居设备到智能城市的实现&#xff0c;这些设备和技术可以让我们的生活变得更加便捷和高效。但是&#xff0c;这些设备也带来了不可忽视的隐私和安全风险。 …

【QT进阶】Qt Web混合编程之html、 js的简单交互

往期回顾 【QT进阶】Qt Web混合编程之VS2019 CEF的编译与使用&#xff08;图文并茂超详细介绍&#xff09;-CSDN博客【QT进阶】Qt Web混合编程之QWebEngineView基本用法-CSDN博客【QT进阶】Qt Web混合编程之CMake VS2019编译并使用QCefView&#xff08;图文并茂超详细版本&…

奇怪的 NRST 管脚异常复位问题

1. 引言 本文探讨一个奇怪的 MCU NRST 管脚异常复位现象。 2. 复位问题及排查 这个问题是客户对开发的平台做 EMS 浪涌测试的时候发生的&#xff0c; 平台上使用了一个STM32G474 RCT6 MCU 。在某个等级的 EMS 测试中&#xff0c; 客户发现 MCU 有时候会异常复位而影响平台的…

Linux驱动开发笔记(一)字符驱动

文章目录 前言一、字符设备驱动程序框架二、基本原理1. 设备号的申请与归还2. 保存file_operations接口3. 设备节点的创建和销毁4. 创建文件设备4.1 mknod4.2 init_special_incode( )函数 5. 查找file_operation接口函数速查表 三、程序编写1. 模块初始化及关闭2. 文件操作方式…

146.LRU缓存

题目&#xff1a; 请你设计并实现一个满足 LRU (最近最少使用) 缓存 约束的数据结构。 实现 LRUCache 类&#xff1a; LRUCache(int capacity) 以 正整数 作为容量 capacity 初始化 LRU 缓存int get(int key) 如果关键字 key 存在于缓存中&#xff0c;则返回关键字的值&…

Pytorch 学习路程

目录 下载Pytorch 入门尝试 几种常见的Tensor Scalar Vector Matrix AutoGrad机制 线性回归尝试 使用hub模块 Pytorch是重要的人工智能深度学习框架。既然已经点进来&#xff0c;我们就详细的介绍一下啥是Pytorch PyTorch 希望将其代替 Numpy 来利用 GPUs 的威力&…