nginx 日志配置

access_log

access_log用来记录客户端请求访问日志,可以出现在http,server,location,if块中。语法如下:

access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];
  • path用来指定日志存放路径,这个是必须参数,其它剩下的是可选参数。

  • format:是日志格式,日志格式可以使用log_format来定义,默认使用combined,是nginx内置的一种日志格式。

  • buffer=size:定义缓冲区大小,用于一次性写入日志的数据量,默认为 64k。

  • gzip[=level]:可选参数,表示是否启用 gzip 压缩日志文件,level 表示压缩级别,0 表示不压缩,1-9 表示压缩级别,默认为 1。

    如果开启gzip压缩,nginx构建时候必须with zlib库。

  • flush=time:定义日志写入磁盘的时间间隔,单位为秒,默认为 1s。

    access_log /var/log/nginx/log.gz combined gzip flush=5s;
    

    如上配置开启gzip压缩,日志以gzip压缩方式进行日志记录。

  • if=condition:可选参数,表示只有符合条件的请求才会被记录到日志中,condition 是一个表达式,可以使用 nginx 变量和运算符。

    map $status $loggable {~^[23]  0;default 1;
    }access_log /path/to/access.log combined if=$loggable;
    

    上面定义一个$status状态码的map映射。以2和3开头的状态码返回0不记录日志,默认其它状态码返回1 if条件成立记录日志。

    if条件用起来看着比较麻烦,其实还不如直接使用if指令来判断

    
    if ($request_method = POST){access_log off;
    }
    if ($request_method = GET) {access_log on;access_log /var/log/nginx/log.log;
    }if ($request_uri ~* "/private/") {access_log /var/log/nginx/private_access.log main;
    }
    

access_log默认格式是:

access_log logs/access.log combined;

如下配置一个access_log

location /log {access_log /var/log/nginx/log.log;return 200;
}

记录的日志格式如下:

192.168.1.111 - - [26/Mar/2024:09:09:09 +0800] "GET /log HTTP/1.1" 200 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/120.0.0.0 Safari/537.36"

这个日志格式是nginx内置的combined格式。如果不想使用该格式,可以使用log_format来自定义日志格式。

log_format

log_format用来设置日志记录的内容格式,语法如下:

log_format name [escape=default|json|none] string ...;
  • name用来指定日志格式的名称,access_log指令使用的format就等于这里定义的名称。

  • escape用来设置特殊字符转义,默认值default特殊字符会被转义,

    default:默认值,特殊字符会被转义

    json:会对特殊字符进行JSON编码,以确保日志内容符合JSON格式要求。

    none:不会对特殊字符进行转义。这样可以在日志中直接输出原始字符,不进行任何处理。

  • string:用来指定日志记录的内容,可以使用变量。变量有两部分,一部分是基本内置变量,在location和rewrite文章中有介绍。另一部分是只有在日志记录时可以使用的变量。

像nginx内置的combined日志格式定义如下:

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

常用的内置变量:

$remote_addr:客户端的IP地址

$host:客户端请求中的主机头字段值,请求服务器端host,可以是域名或ip

$port:请求主机服务端口

$request_uri:请求的路径

$http_user_agent:客户端的 User-Agent 字符串。

$http_referer:referer头信息

日志记录特有的变量:

$bytes_sent:响应的字节数

$request_length:请求的长度

$request_time:请求处理时间,单位秒

$time_local:本地时间带时区

$status:返回的http状态码

$http_x_forwarded_for:客户端的原始IP,再有代理时候取客户端真实IP

$upstream_response_time:上游服务器响应时间,用于记录反向代理时的响应时间。反省代理时使用

$upstream_connect_time:与上游服务器建立连接消耗时间

upstream参数都是反向代理时与上游服务器连接参数。

如下自定义一个log format

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for" "$request_time"';access_log  /var/log/nginx/access.log  main;

log_format只能出现在http块下,是一个全局定义。

error_log

error_log指令用来记录nginx的错误日志,语法

error_log file [level]

如果不显示设置,默认格式是

error_log logs/error.log error;

error_log可以出现在http,server和location块中。

日志级别从低到高有debug, info, notice, warn, error, crit, alert, or emerg这些级别可配置。

像一般的404,500错误都会记录在错误日志中,日志级别默认error就差不多了,没必要设置的太低,除非需要详细信息来进行调试。如果要使用debug级别,nginx在安装时候需要设置–with-debug。

日志切割归档

nginx没有官方的日志归档指令或策略。日志会一直往acces_log或error_log中一直追加。这样就会导致日志文件变的很大。

可以借助linux定时任务(crontab)来周期性的执行脚本进行日志切割。

如下脚本:

#!/bin/bash
#日志根目录
LOG_HOME=/usr/local/nginx/logs/
#备份日志后缀
LOG_PATH_BAK="$(date -d "last_minute" +%Y%m%d%H%M)"
#重命名日志文件
mv ${LOG_HOME}/host.access.log ${LOG_HOME}/access.${LOG_PATH_BAK}.log
mv ${LOG_HOME}/error.log ${LOG_HOME}/error.${LOG_PATH_BAK}.log
#Send a USR1 signal to the Nginx main process.The USR1 signal in Nginx is to reopen the log file
kill -USR1 `cat ${LOG_HOME}/nginx.pid`

最后使用kill -USR1向nginx发送信号量来告诉nginx重新打开日志文件。当然这里备份的文件还可以使用gzip来进行压缩。

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

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

相关文章

【pytorch】安装合集

使用conda或者pip安装的指令 https://pytorch.org/get-started/previous-versions/ 测试pytorch_gpu是否可用的代码 # 测试pytorch是否安装成功 import torch print(torch.__version__) print(torch.cuda.is_available())

阐述el-dropdown(下拉菜单)的基本知识

目录 1. 基本知识2. Demo3. 实战 1. 基本知识 el-dropdown是一个常用的UI组件,用于创建下拉菜单,通常用于实现各种交互式菜单、导航栏或下拉选项 确保安装Element UI库,它包含了el-dropdown组件 npm install element-ui # 或者 yarn add e…

配置Web运行环境与第一个网页

安装与配置Web环境: 如下使用了VSC作为web的运行环境。 下面是VSC的官网点击进入:Download Visual Studio Code - Mac, Linux, Windowshttps://code.visualstudio.com/download 1.下载 进入官网后可以看到有windows,linux,还有苹果按照自己的系统下载&…

Node Sass does not yet support your current environment

项目运行时报错:Node Sass does not yet support your current environment 原因是node版本过高。 解决办法: 使用nvm管理node版本,(如何安装nvm?请点击跳转) 具体步骤如下: 1.查看当前node…

Element UI中日期选择日(date-picker)等其他选择器下拉显示错位、位置错误解决

省流版 给选择器加上唯一key(下面的想看就看) 问题复现 需求是用一个下拉切换时间维度的选择,分别为年度、季度、月度,但是开发的时候发现,当切换的时候,视图可正常切换,但点击选择时却发现选…

软考系统架构设计师(摘抄)01

架构师承担的责任 系统架构师设计师是承担系统架构设计的核心角色,他不仅是连接用户需求和系统进一步设计与实现的桥梁,也是系统开发早期阶段质量保证的关键角色。系统架构师就是项目的总设计师,他是一个既需要掌控整体又需要洞悉局部瓶颈&a…

Vue 2 组件发布到 npm 的常见问题解决

按照 Vue 2 组件打包并发布到 npm 的方法配置项目后,项目在实际开发过程中,随着代码写法的多样性增加而遇到的各种打包问题,本文将予以逐一解决: 本文目录 同时导出多个组件 样式表 import 问题解决 Json 文件 import 问题解决…

图论最短路径以及floyd算法的MATLAB实现

图论是数学的一个分支,起源于18世纪。1736年,数学家欧拉通过解决“哥尼斯堡七桥问题”,将问题抽象成点和线的关系,并通过理论分析得出结论,这个过程标志着图论的产生,欧拉也因此被称为“图论之父”。图论研…

智慧城市解决方案大全:标准规范顶层设计指南、整体解决方案、厂商售前宣讲PPT、招投标、智慧城市白皮书等全套680份,一次性打包下载

关键词:智慧城市,智慧城市解决方案,智慧城市发展的前景与趋势,智慧城市概念主力流出,智慧城市项目包括哪些方面,智慧城市项目方案,智慧城市宣传片,智慧城市白皮书,智慧城…

MySQL之MVCC如何实现可重复读和提交读

(/≧▽≦)/~┴┴ 嗨~我叫小奥 ✨✨✨ 👀👀👀 个人博客:小奥的博客 👍👍👍:个人CSDN ⭐️⭐️⭐️:Github传送门 🍹 本人24应届生一枚,技术和水平有…

教程3_图像的轮廓

目录 目标 1. 特征矩 2、轮廓质心 3. 轮廓面积 4. 轮廓周长 5. 轮廓近似 6. 轮廓凸包 7. 边界矩形 7.1.直角矩形 7.2. 旋转矩形 8. 最小闭合圈 9. 拟合一个椭圆 10. 拟合直线 目标 在本文中,我们将学习 - 如何找到轮廓的不同特征,例如面积&…

力扣 217.存在重复元素

给你一个整数数组 nums 。如果任一值在数组中出现 至少两次 ,返回 true ;如果数组中每个元素互不相同,返回 false 。 示例 1: 输入:nums [1,2,3,1] 输出:true 示例 2: 输入:num…

Ansible剧本playbooks详解

一、playbook简介 playbook是ansible用于配置,部署和管理托管主机剧本,通过playbook的详细描述,执行其中一系列tasks,playbook字面意思是剧本,现实中由演员按剧本表演,在ansible中由计算机进行安装&#x…

nginx负载均衡模式

轮询 (Round Robin) 用法:这是Nginx默认的负载均衡策略。每个请求会按顺序分配给upstream中的后端服务器,即按照配置的服务器列表顺序依次分配。 upstream backend {server backend1.example.com;server backend2.example.com;server backend3.example.c…

【Java】LinkedList vs. ArrayList:Java中的数据结构选择

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

docker日志大小设置(doker logs)

参考文章docker logs日志上限(日志容量上限、日志大小上限)(默认大小、默认日志大小)_docker 日志限制-CSDN博客 如果想要更改 Docker daemon 的全局默认设置,可以修改 Docker daemon 的配置文件 /etc/docker/daemon…

zookeeper--Znode类型详解---面试宝典

一、Znode分类 1、persistent_node 持久化节点 是默认类型,该类型节点,并不会随着客户端断开就会自动删除;zookeeper服务重启该节点也不会被删除,只有手动删除的时候才会删除;可以创建子节点; # create …

uniapp开发小程序遇到的问题,持续更新中

一、uniapp引入全局scss 在App.vue中引入uni.scss <style lang"scss">/* #ifndef APP-NVUE */import "uni.scss";/* #endif */ </style>注意&#xff1a;nvue页面的样式在编译时&#xff0c;有很多样式写法被限制了&#xff0c;容易报错。所…

【C++ leetcode】双指针(专题完结)

15. 三数之和 题目 给你一个整数数组 nums &#xff0c;判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i ! j、i ! k 且 j ! k &#xff0c;同时还满足 nums[i] nums[j] nums[k] 0 。请 你返回所有和为 0 且不重复的三元组。 注意&#xff1a;答案中不可以包含重复的…

驱动器的工艺结构原理及选型参数总结

🏡《总目录》 目录 1,概述2,工作原理2.1,信号转换2.2,电流放大2.3,电压级转换2.4,控制输出3,结构特点3.1,高集成度3.2,多功能性3.3,高性能3.4,省电节能3.5,稳定可靠4,工艺流程<