Nginx--日志(介绍、配置、日志轮转)

前言:本博客仅作记录学习使用,部分图片出自网络,如有侵犯您的权益,请联系删除

一、Nginx日志介绍

nginx 有一个非常灵活的日志记录模式,每个级别的配置可以有各自独立的访问日志, 所需日志模块 ngx_http_log_module 的支持,日志格式通过 log_format 命令来定义,日志对于统计和排错是非常有利的,下面总结了 nginx 日志相关的配置 包括 access_log 、 log_format 、open_log_file_cache 、 rewrite_log 、 error_log

二、Nginx日志配置

1、格式

?# 设置访问日志
?access_log path [format [buffer=size] [gzip[=level]] [flush=time]
?[if=condition]];
?# 关闭访问日志
?access_log off;

参数

作用

path

指定日志的存放位置

format

指定日志的格式。默认使用预定义的 combined

buffer

用来指定日志写入时的缓存大小。默认是64k

gzip

日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1

flush

设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空

if 条件判断

如果指定的条件计算为0或空字符串,那么该请求不会写入日志

2、作用域

可以应用 access_log 指令的作用域分别有http , server , location , limit_except 。也就是说,在这几个作用域外使用该指令,Nginx会报错

示例:

?# 指定日志的写入路径为 /var/logs/nginx-access.log ,日志格式使用默认的 combined
?access_log /var/logs/nginx-access.log
??
?# 指定日志的写入路径为 /var/logs/nginx-access.log ,日志格式使用默认的 combined ,指定
?日志的缓存大小为 32k,日志写入前启用 gzip 进行压缩,压缩比使用默认值 1,缓存数据有效时间为1分
?钟
?access_log /var/logs/nginx-access.log buffer=32k gzip flush=1m

3、log_format 指令

Nginx预定了名为combined日志格式,如果没有明确指定日志格式默认使用该格式:

log_format combined '$remote_addr - KaTeX parse error: Undefined control sequence: \[ at position 14: remote\_user \̲[̲time_local] ’ ‘“$request” $status KaTeX parse error: Double superscript at position 21: …_bytes\_sent ' '̲"http_referer" “$http_user_agent”’;

如果不想使用Nginx预定义格式,可以通过log_format指令来自定义;其语法:

log_format name [escape=default|json] string …;

参数

说明

name

格式名称。在access_log指令中使用

escape

设置变量中的字符编码方式是json还是default,默认为default

string

要定义的日志格式内容。该参数可以有多个。参数中可以使用Nginx变量

3.1、自定义日志格式的使用

access_log /var/logs/nginx-access.log main
log_format main '$remote_addr - KaTeX parse error: Undefined control sequence: \[ at position 14: remote\_user \̲[̲time_local] “KaTeX parse error: Double superscript at position 28: … '̲status b o d y _ b y t e s _ s e n t " body\_bytes\_sent " body_bytes_sent"http_referer” ’
‘“ h t t p _ u s e r _ a g e n t " " http\_user\_agent" " http_user_agent""http_x_forwarded_for”’;

使用 log_format 指令定义了一个 main 的格式,并在 access_log 指令中引用了它。假如客户端有发起请求: https://testpm.com/ ,我们看一下我截取的一个请求的日志记录:

?10.0.105.207 - - [01/Jul/2019:10:44:36 +0800] "GET / HTTP/1.1" 304 0 "-"
?"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like
?Gecko) Chrome/75.0.3770.100 Safari/537.36" "-"

我们看到最终的日志记录中 $remote_user 、 $http_referer 、 $http_x_forwarded_for 都对应了一个 - ,这是因为这几个变量为空;注意日志里面的ip地址一定要在第一列

4、error_log 指令

错误日志在Nginx中是通过 error_log 指令实现的。该指令记录服务器和请求处理过程中的错误信息,其语法:

?error_log file [level];     # 指定日志的写入位置与日志的级别;level可以是 debug、info、 notice、warn、error、crit、alert , emerg中的任意值
??
?# 默认:
?Default:    
?error_log logs/error.log error;

配置段: main , http , mail , stream , server , location 作用域

5、open_log_file_cache 指令

每一条日志记录的写入都是先打开文件再写入记录,然后关闭日志文件;如果你的日志文件路径中使用了变量,如access_log /var/logs/$host/nginx-access.log,为提高性能,可以使用open_log_file_cache指令设置日志文件描述符的缓存,其语法:

?open_log_file_cache max=N [inactive=time] [min_uses=N] [valid=time];
??
?# 默认:
?open_log_file_cache off;

参数

说明

max

设置缓存中最多容纳的文件描述符数量,如果被占满,采用LRU算法将描述符关闭

inactive

设置缓存存活时间,默认是10s

min_uses

inactive时间段内,日志文件最少使用几次,该日志文件描述符记入缓存,默认是1次

vaild

设置多久对日志文件名进行检查,看是否发生变化,默认是60s

off

不使用缓存。默认为off

配置段:http 、 server 、 location 作用域中。

示例:设置缓存最多缓存1000个日志文件描述符,20s内如果缓存中的日志文件描述符至少被被访问2次,才不会被缓存关闭。每隔1分钟检查缓存中的文件描述符的文件名是否还存在

?open_log_file_cache max=1000 inactive=20s valid=1m min_uses=2;

6、rewrite_log指令

ngx_http_rewrite_module模块提供的。用来记录重写日志的。对于调试重写规则建议开启,启用时将在 error_log 中记录 notice 级别的重写日志。其基本语法:

?rewrite_log on | off;
?默认值:
?rewrite_log off;

配置段:http , server , location , if 作用域

三、Nginx日志配置总结

Nginx中通过access_log 和 error_log 指令配置访问日志和错误日志,通过 log_format 我们可以自定义日志格式。如果日志文件路径中使用了变量,我们可以通过 open_log_file_cache 指令 来设置缓存,提升性能。其他的根据自己的使用场景定义。详细的日志配置信息可以参考 Alphabetical index of variables (nginx.org)

四、Nginx的日志轮转

日志轮转(Log rotation)是一种在服务器或应用程序中管理日志文件的常用策略,目的是控制日志文件的大小和数量,防止它们无限制增长,从而占用过多的磁盘空间,并确保日志文件的可管理性和可访问性

?[root@192 ~]# rpm -ql nginx |grep log
?/etc/logrotate.d/nginx
?/var/log/nginx
?[root@192 ~]# vim /etc/logrotate.d/nginx
?/var/log/nginx/*.log {      #指定需要轮转处理的日志文件
?  daily                     #日志文件轮转周期,可用值为: daily/weekly/yearly
?  missingok                 # 忽略错误信息
?  rotate 7                  # 轮转次数,即最多存储7个归档日志,会删除最久的归档日志
?  minsize 5M                #限制条件,大于5M的日志文件才进行分割,否则不操作
?  dateext                   # 以当前日期作为命名格式
?  compress                  # 轮循结束后,已归档日志使用gzip进行压缩
?  delaycompress             # 与compress共用,最近的一次归档不要压缩
?  notifempty                # 日志文件为空,轮循不会继续执行
?  create 640 nginx nginx    #新日志文件的权限
?  sharedscripts             #有多个日志需要轮询时,只执行一次脚本
?  postrotate            # 将日志文件转储后执行的命令。以endscript结尾,命令需要单独成行
? ?if [ -f /var/run/nginx.pid ]; then #判断nginx的PID。#默认logrotate会以root身份运行
? ? ?kill -USR1 cat /var/run/nginx.pid
? ?fi
?  endscript
?}
?# 执行命令:
?[root@192 nginx]# /usr/sbin/logrotate -f /etc/logrotate.conf
?# 创建计划任务:
?[root@192 nginx]# crontab -e
?59 23 * * * /usr/sbin/logrotate -f /etc/logrotate.conf

致谢

在此,我要对所有为知识共享做出贡献的个人和机构表示最深切的感谢。同时也感谢每一位花时间阅读这篇文章的读者,如果文章中有任何错误,欢迎留言指正。

学习永无止境,让我们共同进步!!

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

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

相关文章

cs106x-lecture12(Autumn 2017)-SPL实现

打卡cs106x(Autumn 2017)-lecture12 (以下皆使用SPL实现,非STL库,后续课程结束会使用STL实现) travel Write a recursive function named travel that accepts integers x and y as parameters and uses recursive backtracking to print all solution…

了解随机振动疲劳分析中 Ansys nCode DesignLife 的平均应力校正

概括 在本篇博文中,我们将探讨 Ansys nCode 在分析随机振动引起的疲劳方面的重要性。我们将了解 nCode 如何帮助校正平均应力并预测受随机振动影响的结构的寿命和耐久性。 什么是疲劳寿命以及了解平均应力对疲劳寿命的影响 疲劳寿命是指结构在重复载荷作用下发生…

ubuntu20.04重启后不显示共享文件夹

ubuntu20.04重启后不显示共享文件夹 主要参见这两篇博客 Ubuntu重启后不显示共享文件夹_ubuntu 20.04 共享目录无法使用-CSDN博客 ubuntu22.04 配置共享文件夹 找不到/mnt/hgfs_ubuntu安装tools 后mnt文件夹在哪-CSDN博客 重启Ubuntu20.04后,发现共享文件夹进不去…

Rust编程语言入门教程 (六)变量与可变性

Rust 系列 🎀Rust编程语言入门教程(一)安装Rust🚪 🎀Rust编程语言入门教程(二)hello_world🚪 🎀Rust编程语言入门教程(三) Hello Cargo&#x1f…

nvm安装、管理node多版本以及配置环境变量【保姆级教程】

引言 不同的项目运行时可能需要不同的node版本才可以运行,由于来回进行卸载不同版本的node比较麻烦;所以需要使用node工程多版本管理。 本人在配置时,通过网络搜索教程,由于文章时间过老,或者文章的互相拷贝导致配置时…

本地部署DeepSeek大模型

环境:nuc工控机器 x86架构 ubuntu20.04 1、浏览器打开Download Ollama on Linux,复制命令。 2.打开终端,输入命令。 curl -fsSL https://ollama.com/install.sh | sh 等待安装,安装完成后,终端输入 ollama&#xff…

深度解析应用层协议-----HTTP与MQTT(涵盖Paho库)

HTTP协议概述 1.1 HTTP的基本概念 HTTP是一种应用层协议,使用TCP作为传输层协议,默认端口是80,基于请求和响应的方式,即客户端发起请求,服务器响应请求并返回数据(HTML,JSON)。在H…

Mac M3/M4 本地部署Deepseek并集成vscode

Mac 部署 使用傻瓜集成平台ollama,ollama平台依赖于docker,Mac的M3/M4 因doesn’t have VT-X/AMD-v enabled 所以VB,VM无法使用,导致docker无法启动,需要使用docker的替代品podman, 它完全兼容docker brew install p…

MySQL版本选择与安装

MySQL版本选择与安装 MySQL 5.5 优点: 稳定性:5.5版本是长期支持(LTS)版本,因此它非常稳定,被广泛部署在生产环境中。 兼容性:与旧版本的MySQL和各种应用程序有很好的兼容性。 缺点: 过时:…

雨后清新气味的关键角色——土臭素与2-甲基异茨醇

在日常生活里,我们或许都有过这样的体验。每当一场雨淅淅沥沥落下,结束后,空气中总会弥漫起一股独特的气息。那是一种清新的土味儿,细细分辨,还能捕捉到青草散发的芬芳。深深吸上一口,仿佛整个世界都被这场…

第1章大型互联网公司的基础架构——1.10 其他NoSQL数据库

这里我们简单介绍一下其他常见的NoSQL数据库及其适用的场景,其中部分数据库会在后续服务设计章节中正式使用时再做详细介绍。 1.10.1 文档数据库 文档数据库的典型代表是MongoDB和CouchDB。**文档数据库普遍采用JSON格式来存储数据,而不是采用僵硬的行…

浅谈网络 | 容器网络之Cilium

目录 Cilium介绍Cilium是什么Cilium 主要功能特性为什么用Cilium? 功能概述组件概况BPF 与 XDPeBPF (Extended Berkeley Packet Filter)XDP (eXpress Data Path) Cilium介绍 Cilium是什么 Cilium 是一个开源网络和安全项目,专为 Kubernetes、Docker 和…

UE 学习记录

1.启用输入Enable Input 2.设置鼠标光标可见性 3.增加Widget到窗口 4.分辨率设置 5.游戏暂停/恢复/退出 6.游戏数据保存和加载 (1).创建SaveGame (2).保存数据 (3).加载数据

大模型面经:SFT和RL如何影响模型的泛化或记忆能力?

监督微调 (SFT) 和强化学习 (RL)都是目前大模型的基础模型后训练技术,像DeepSeek-R1、kimi等的训练方法都将两种技术应用到了极致。 如何去设计训练步骤(先SFT再RL,还是直接RL)都需要对SFT和RL的能力有较深刻的了解。 本篇就以面…

国产编辑器EverEdit - 文本编辑器的关键特性:文件变更实时监视,多头编辑不掉坑

1 监视文件变更 1.1 应用场景 某些时候,用户会使用多个编辑器打开同一个文件,如果在A编辑器修改保存,但是B编辑器没有重新打开,直接在B编辑器修改再保存,则可能造成在A编辑器中修改的内容丢失,因此&#x…

MacOS下使用Ollama本地构建DeepSeek并使用本地Dify构建AI应用

目录 1 大白话说一下文章内容2 作者的电脑配置3 DeepSeek的本地部署3.1 Ollamal的下载和安装3.2 选择合适的deepseek模型3.3 安转deepseek 4 DifyDeepSeek构建Al应用4.1 Dify的安装4.1.1 前置条件4.1.2 拉取代码4.1.3 启动Dify 4.2 Dify控制页面4.3 使用Dify实现个“文章标题生…

图论 之 DFS

文章目录 1971.寻找图中是否存在路径797.所有可能的路径841.钥匙和房间 DFS的遍历的模版大差不差,主要是区别题目中的图是否是有环的?题目求解的是可达问题,路径数量问题 开始的时候,如果题目中的边的记录没有转化为邻接表的形式&…

《跟李沐学 AI》AlexNet论文逐段精读学习心得 | PyTorch 深度学习实战

前一篇文章,使用 AlexNet 实现图片分类 | PyTorch 深度学习实战 本系列文章 GitHub Repo: https://github.com/hailiang-wang/pytorch-get-started 本篇文章内容来自于学习 9年后重读深度学习奠基作之一:AlexNet【下】【论文精读】】的心得。 《跟李沐…

武汉火影数字|VR沉浸式空间制作 VR大空间打造

VR沉浸式空间制作是指通过虚拟现实技术创建一个逼真的三维环境,让用户能够沉浸在这个环境中,彷佛置身于一个全新的世界。 也许你会好奇,VR 沉浸式空间究竟是如何将我们带入那奇妙的虚拟世界的呢?这背后,离不开一系列关…

ARM-Linux 基础项目篇——简单的视频监控

该基础项目为后面的 AI 安防项目做铺垫。使用 Qt 的网络编程方案来实现,后期再实现流媒体协议的方案。使用 ov2640 摄像头。 一、实现流程 (1) 服务器采集摄像头的数据。 (2) 处理视频数据转交给 Socket,…