当前位置: 首页 > article >正文

Nginx实战:2-日志配置

目录

前言

一、访问日志

1.字段配置

2.日志配置

3.默认配置

二、错误日志


前言

Nginx是一款高性能的HTTP和反向代理服务器,同时也是一个IMAP/POP3/SMTP服务器。在Nginx的日常使用中,日志记录是非常重要的一部分,它可以帮助我们监控服务器的运行状态、诊断问题以及分析用户行为等。下面将介绍如何配置Nginx的日志。

http {
    ...
    
    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                   '$status $body_bytes_sent "$http_referer" '
                   '"$http_user_agent" "$http_x_forwarded_for"';
    
    access_log /var/log/nginx/access.log main;
    
    error_log /var/log/nginx/error.log warn;
    
    ...
}

一、访问日志

访问日志记录每一次用户的资源请求,是最常用的数据分析来源。

1.字段配置

参数:log_format

格式:log_format 格式名 '字段格式'

(一般都是写在http下面,server里面直接引用就可以)

参考配置:

log_format main '$server_name $remote_addr - $remote_user [$time_local] "$request" '
'$status $uptream_status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for" '
'$ssl_protocol $ssl_cipher $upstream_addr $request_time $upstream_response_time';

字段说明(标红的是作者认为比较重要的字段)

  • $server_name:虚拟主机名称。如果nginx代理了多个域名,日志文件有没有分开,这个字段就可以起到区分的作用。
  • $remote_addr:远程客户端的IP地址。
  • -:空白,用一个“-”占位符替代,历史原因导致还存在。
  • $remote_user:远程客户端用户名称,用于记录浏览者进行身份验证时提供的名字,如登录百度的用户名scq2099yt,如果没有登录就是空白。
  • [$time_local]:访问的时间与时区,比如18/Jul/2012:17:00:01 +0800,时间信息最后的"+0800"表示服务器所处时区位于UTC之后的8小时。
  • $request:请求的URI和HTTP协议,这是整个PV日志记录中最有用的信息,记录服务器收到一个什么样的请求
  • $status:记录请求返回的http状态码,比如成功是200。
  • $upstream_addr:后端服务器的IP地址
  • $upstream_status:后端服务器返回的HTTP状态码
  • $body_bytes_sent:发送给客户端的文件主体内容的大小,比如899,可以将日志每条记录中的这个值累加起来以粗略估计服务器吞吐量。
  • $http_referer:记录从哪个页面链接访问过来的。 
  • $http_user_agent:客户端浏览器信息
  • $http_x_forwarded_for:客户端的真实ip,通常web服务器放在反向代理的后面,这样就不能获取到客户的IP地址了,通过$remote_add拿到的IP地址是反向代理服务器的iP地址。反向代理服务器在转发请求的http头信息中,可以增加x_forwarded_for信息,用以记录原有客户端的IP地址和原来客户端的请求的服务器地址。
  • $ssl_protocol:SSL协议版本,比如TLSv1。
  • $ssl_cipher:交换数据中的算法,比如RC4-SHA。 
  • $upstream_addr:upstream的地址,即真正提供服务的主机地址。 
  • $request_time:整个请求的总时间。 
  • $upstream_response_time:请求过程中,upstream的响应时间。

2.日志配置

参数:access_log

格式:access_log path [format [buffer=size] [gzip[=level]] [flush=time] [if=condition]];

  •    path:是日志文件存放的路径(必填)
  •    format:是前面用log_format指定设置的日志格式的名称(非必填,不填就用默认格式配置)
  •    buffer:是设置内存缓冲区的大小,避免大量日志造成频繁磁盘读写,如果实时调试,就不要配置了
  •    flush:是设置缓冲区内日志的最长保存时间,超过时间也会立即写入到磁盘
  •    gzip: 日志写入前先进行压缩。压缩率可以指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。
  •    if :设置条件判断 满足条件的才进行日志记录(可以写在http, server, location, if in location, limit_except中)

举例:

access_log /var/log/nginx/access.log man buffer=32k gzip flush=5m

不过一般简单配置就可以

access_log /var/log/nginx/access.log man

如果不开起访问日志可以配置 access_log off;

3.默认配置

默认的nginx的日志配置如下:

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

access_log  logs/access.log  combined;

二、错误日志

日志级别支持:debug | info | notice | warn | error | crit | alert | emerg,错误级别从左到右越来越大。

error_log 可以在main,http,mail,stream,server,loaction 范围中定义,但是一般在man下面创建一个就可以了。(配置里面可以配置多个错误日志,但是相同范围下,多个配置会报错(例如http里面只能配置一个错误日志,配置多个会报错;http配置了,location里面一样可以配置))

配置格式:

error_log 日志文件(文件路径+文件名) 错误级别(非必选,默认error);

举例:

error_log /var/log/nginx/error.log error;

如果不开起错误日志可以配置 error_log off;


http://www.kler.cn/news/234307.html

相关文章:

  • wireshark抓包问题及学习
  • Uniapp(uni-app)学习与快速上手教程
  • vue3初识
  • Qt PCL学习(三):点云滤波
  • 2024.2.10 DMS(数据库管理系统)初体验
  • 【知识整理】技术新人的培养计划
  • 关于创建vue项目报错command failed: npm install --loglevel error
  • 蓝桥杯刷题--python-4
  • 4核8G服务器配置性能怎么样?12M带宽配置服务器能干什么?
  • Git详细讲解
  • jsp教材管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • .gitlab-ci.yml文件参数配置和使用
  • 电脑空间爆满解决方法
  • c++之说_11|自定义类型 enum(枚举)与enumclass (c11新枚举)
  • Apache网站部署
  • 应用层 HTTP协议(1)
  • 《动手学深度学习(PyTorch版)》笔记8.3
  • 【笔记】Helm-5 Chart模板指南-11 子chart和全局值
  • 学习之旅9------JavaScript面向对象编程(OOP)全面解析
  • 【数据分享】1929-2023年全球站点的逐日降水量数据(Shp\Excel\免费获取)
  • 13.Swift元组
  • C语言第二十二弹---指针(六)
  • LineageOS 线刷包 小米红米 Note 4 (Mido)
  • 从事机器视觉,笔记本电脑该如何选型
  • 基于JSP的网上购书系统
  • Avalonia 虚拟化
  • Golang的for循环变量和goroutine的陷阱,1.22版本的更新
  • 【Java万花筒】加速Java应用程序:探索性能优化的利器
  • python3创建虚拟环境venv
  • 猫头虎分享已解决Bug || Kubernetes Error: Pods ‘pod-name‘ Not Found