Nginx日志格式配置的实现

 更新时间:2025年05月21日 10:39:29   作者:Live in Shanxi.  
本文主要介绍了Nginx日志格式配置的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

Nginx日志格式配置 

Nginx日志一般有main格式(默认)和json格式两种

对比总结

特性默认文本格式JSON 格式
性能高性能,占用资源低解析耗时,CPU 占用相对较高
磁盘占用日志简短,占用小每个字段都带有名称,占用较大
日志分析需要手动解析,较为复杂结构化数据,分析工具集成方便
可读性人眼查看方便不直观,主要靠日志系统查看
扩展性不方便添加新字段灵活添加新字段
集成性兼容传统日志工具适合与 ELK、EFK 进行日志对接

💡 最佳实践

  • 性能优先: 如果服务器性能不足,优先使用文本格式。
  • 日志分析优先: 如果要进行集中化日志分析(如 ELK),优先使用JSON 格式。
  • 日志分级: 错误日志使用文本格式,访问日志使用 JSON 格式,这样既能高效记录错误,又能对业务数据进行分析。
  • 日志切割与归档: 及时进行日志切割和清理,避免磁盘爆满。

🎯 总结

  • 默认文本格式: 高性能,低资源消耗,适合轻量级或性能要求高的生产环境。
  • JSON 格式: 结构化日志,便于分析和监控,适合现代化运维和日志管理需求。

一、main 日志变量

1. 请求相关变量

变量名含义示例值
$remote_addr客户端的 IP 地址192.168.1.1
$remote_user客户端的认证用户名admin
$request请求的完整字符串(方法 + URI + 协议)GET /index.html HTTP/1.1
$request_method请求的方法GET, POST
$request_uri原始的请求 URI(包括参数)/index.html?user=123
$uri请求的 URI,不包括查询参数/index.html
$args请求的查询参数字符串user=123&name=abc
$query_string与 $args 等效,查询字符串user=123&name=abc
$status响应的 HTTP 状态码200, 404
$body_bytes_sent响应体大小(字节数)2048
$http_referer引荐页面 URLhttp://example.com/
$http_user_agent客户端的浏览器信息Mozilla/5.0 (Windows NT)

2. 时间相关变量

变量名含义示例值
$time_local本地时间戳19/Mar/2025:04:03:51 +0800
$time_iso8601ISO 8601 格式的时间戳2025-03-19T04:03:51+08:00
$msec精确到毫秒的 Unix 时间戳1614768000.123

3. 客户端相关变量

变量名含义示例值
$remote_addr客户端的 IP 地址192.168.1.1
$remote_port客户端的端口号52345
$http_x_forwarded_for客户端的原始 IP 地址,通常用于代理链路中192.168.1.1
$http_user_agent客户端的 User-Agent 信息Mozilla/5.0 (Windows NT)
$http_referer请求的来源 URL(如果有的话)http://example.com/

4. 上游服务器相关变量

变量名含义示例值
$upstream_addr上游服务器的地址(包括端口)127.0.0.1:8080
$upstream_status上游服务器响应的状态码200, 502
$upstream_response_time上游服务器的响应时间(秒)0.125
$upstream_connect_time与上游服务器建立连接的时间0.050

5. 请求处理相关变量

变量名含义示例值
$request_time处理请求所花费的总时间(秒)0.123
$response_time响应返回的总时间(秒)0.098
$upstream_response_time从上游服务器接收到响应的时间(秒)0.125
$pipe是否通过管道连接处理请求,p 表示是,. 表示不是p

6. Nginx 内部变量

变量名含义示例值
$hostnameNginx 主机名nginx-server
$server_name当前处理请求的服务器名称www.example.com
$server_addr当前处理请求的服务器 IP 地址192.168.1.1
$nginx_version当前 Nginx 的版本号1.21.3

示例配置:Nginx 日志格式

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

#输出结果

192.168.200.1 - - [19/Mar/2025:03:26:35 -0400] "GET /prod-api/captchaImage HTTP/1.1" 200 4137 "http://192.168.200.14/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" "-"
192.168.200.1 - - [19/Mar/2025:03:26:40 -0400] "POST /prod-api/login HTTP/1.1" 200 239 "http://192.168.200.14/login?redirect=%2Findex" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0" "-"

字段含义:

  • time:
    • 日志时间戳,采用 ISO 8601 格式。
      • "2025-03-19T04:51:55-04:00":表示 2025 年 3 月 19 日,04:51:55(-04:00 时区)。
  • request_time:
    • 请求总耗时,单位是秒。
      • "0.000":表示从接收到请求到返回响应的时间为 0 秒,响应极快。
  • upstream_response_time:
    • 上游服务器(如 Tomcat)响应时间,单位是秒。
      • "-":表示当前请求没有经过上游服务器(如静态资源请求)。
  • remote_addr:
    • 客户端 IP 地址。
      • "192.168.200.1":请求是从该 IP 地址发出的。
  • remote_user:
    • 远程用户的身份认证信息。
      • "-":表示未进行身份认证(或不涉及认证)。
  • request:
    • 请求行,包含请求方法、资源路径和协议版本。
      • "GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1":表示发起了 GET 请求,访问了指定的静态资源文件。
  • status:
    • 响应状态码,表示请求处理结果。
      • "200":请求成功。
  • body_bytes_sent:
    • 发送给客户端的响应体字节数。
      • "10029":表示响应体大小为 10029 字节。
  • http_referer:
    • 请求来源的 URL,表示请求是从哪个页面发起的。
      • "http://192.168.200.14/monitor/druid":表示从监控页面发起的请求。
  • http_user_agent:
    • 客户端的用户代理信息,通常包含浏览器和操作系统信息。
      • "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0"
  • http_x_forwarded_for:
    • 用于记录客户端真实 IP 地址,通常用于反向代理或负载均衡场景。
      • "-":表示没有经过代理或没有携带该头信息。

二、Json常用变量

1.请求相关变量

变量名含义示例值
$request请求的完整字符串(方法+URI+协议)GET /index.html HTTP/1.1
$request_method请求方法GET, POST, PUT, DELETE
$request_uri原始请求的 URI(包含参数)/index.html?user=123
$uri请求的 URI(不含参数)/index.html
$args请求的参数字符串user=123&name=abc
$query_string与 $args 等效user=123&name=abc
$status响应状态码200, 404, 500
$protocol请求协议HTTP/1.1, HTTP/2.0
$host请求主机名www.example.com
$server_name服务器名称example.com
$server_port服务器端口80, 443

2.时间和日期相关变量

变量名含义示例值
$time_iso8601ISO 8601 格式的时间戳2025-03-19T04:03:51+08:00
$time_local本地时间戳19/Mar/2025:04:03:51 +0800
$msec精确到毫秒的时间戳(Unix 时间戳)1614768000.123

3.客户端和用户相关变量

变量名含义示例值
$remote_addr客户端 IP 地址192.168.1.1
$remote_port客户端端口52345
$remote_user已经认证的用户名admin
$http_user_agent用户代理字符串Mozilla/5.0 (Windows NT 10.0...)
$http_referer引荐页面http://example.com/page.html
$http_x_forwarded_for代理服务器转发的原始客户端 IP 地址192.168.1.1, 172.16.0.1

4.上游和代理相关变量

变量名含义示例值
$upstream_addr上游服务器地址(IP:端口)127.0.0.1:8080
$upstream_status上游服务器返回的状态码200, 502
$upstream_response_time上游服务器响应时间(秒)0.125
$upstream_connect_time连接上游服务器所花费的时间(秒)0.050
$upstream_header_time上游服务器响应头时间(秒)0.075

5.请求处理和性能相关变量

变量名含义示例值
$request_time请求从接收到响应完成的总时间(秒)0.245
$body_bytes_sent发送给客户端的响应字节数(不含响应头)1024
$bytes_sent发送的总字节数(包含响应头)2048
$connection连接的序列号12345
$connection_requests当前连接上处理的请求数5

6.系统和环境变量

变量名含义示例值
$pid处理请求的工作进程 ID1234
$pipe表示请求是否通过管道传输p(管道),.(直接连接)

示例:JSON 日志格式配置

log_format json '{"time":"$time_iso8601",'
                '"request_time":$request_time,'
                '"upstream_response_time":"$upstream_response_time",'
                '"remote_addr":"$remote_addr",'
                '"remote_user":"$remote_user",'
                '"request":"$request",'
                '"status":$status,'
                '"body_bytes_sent":$body_bytes_sent,'
                '"http_referer":"$http_referer",'
                '"http_user_agent":"$http_user_agent",'
                '"http_x_forwarded_for":"$http_x_forwarded_for"}';

access_log /var/log/nginx/access.log json;

#输出结果

{"time":"2025-03-19T04:51:55-04:00","request_time":0.000,"upstream_response_time":"-","remote_addr":"192.168.200.1","remote_user":"-","request":"GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1","status":200,"body_bytes_sent":10029,"http_referer":"http://192.168.200.14/monitor/druid","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0","http_x_forwarded_for":"-"}
{"time":"2025-03-19T04:51:56-04:00","request_time":0.010,"upstream_response_time":"0.009","remote_addr":"192.168.200.1","remote_user":"-","request":"GET /prod-api/monitor/server HTTP/1.1","status":200,"body_bytes_sent":93,"http_referer":"http://192.168.200.14/monitor/server","http_user_agent":"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/134.0.0.0 Safari/537.36 Edg/134.0.0.0","http_x_forwarded_for":"-"}

字段含义:

  • time:

    • 日志时间戳,采用 ISO 8601 格式。
    • "2025-03-19T04:51:55-04:00":表示 2025 年 3 月 19 日,04:51:55(-04:00 时区)。
  • request_time:

    • 请求总耗时,单位是秒。
    • "0.000":表示从接收到请求到返回响应的时间为 0 秒,响应极快。
  • upstream_response_time:

    • 上游服务器(如 Tomcat)响应时间,单位是秒。
    • "-":表示当前请求没有经过上游服务器(如静态资源请求)。
  • remote_addr:

    • 客户端 IP 地址。
    • "192.168.200.1":请求是从该 IP 地址发出的。
  • remote_user:

    • 远程用户的身份认证信息。
    • "-":表示未进行身份认证(或不涉及认证)。
  • request:

    • 请求行,包含请求方法、资源路径和协议版本。

    • "GET /static/js/chunk-2d0bce05.7b94b559.js HTTP/1.1"
      
      • GET:HTTP 请求方法。
      • /static/js/chunk-2d0bce05.7b94b559.js:请求的资源路径。
      • HTTP/1.1:协议版本。
  • status:

    • HTTP 响应状态码。
    • 200:表示请求成功。
  • body_bytes_sent:

    • 响应体的字节数。
    • 10029:表示响应大小为 10029 字节(约 9.8 KB)。
  • http_referer:

    • 引荐页面,即从哪个页面发起的请求。
    • "http://192.168.200.14/monitor/druid":用户是从这个页面发起的请求。
  • http_user_agent:

    • 客户端的浏览器和操作系统信息。
    • 浏览器:Chrome 134.0.0.0
    • 操作系统:Windows 10 x64
  • http_x_forwarded_for:

    • 用于识别通过代理服务器访问的客户端的真实 IP。
    • "-":表示没有经过代理,或没有传递该头信息。

到此这篇关于Nginx日志格式配置的实现的文章就介绍到这了,更多相关Nginx日志配置内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家! 

相关文章

  • Nginx反向代理springboot的jar包过程解析

    Nginx反向代理springboot的jar包过程解析

    这篇文章主要介绍了Nginx反向代理springboot的jar包过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-05-05
  • nginx日志分割 for linux

    nginx日志分割 for linux

    默认情况下,nginx是不分割访问日志的,久而久之,网站的日志文件将会越来越大,占用空间不说,如果有问题要查看网站的日志的话,庞大的文件也将很难打开,于是便有了下面的脚本
    2013-11-11
  • 在linux中安装nginx及在树莓派ubuntu中安装nginx的方法

    在linux中安装nginx及在树莓派ubuntu中安装nginx的方法

    在进行软件安装时,若遇到报错,常见的解决方法之一是检查是否缺失依赖,并尝试安装所需的依赖包,记得去掉尖括号,对于nginx服务器,配置文件的位置和管理是关键操作之一,通过命令cd进入后,使用sudo nano index.nginx-debian.html命令打开并编辑默认的html文件
    2024-11-11
  • 详解如何设置Nginx实现内外网端口映射

    详解如何设置Nginx实现内外网端口映射

    在 Nginx 中实现内外网端口映射是一种常见的做法,本文详细介绍如何设置 Nginx 实现内外网端口映射,有需要的小伙伴可以跟随小编一起学习一下
    2024-10-10
  • linux上nginx安装部署及使用过程详解

    linux上nginx安装部署及使用过程详解

    这篇文章主要介绍了linux上nginx安装部署及使用过程,非常不错,具有一定的参考借鉴价值,需要的朋友参考下吧
    2019-11-11
  • 详解Nginx如何配置Web服务器的示例代码

    详解Nginx如何配置Web服务器的示例代码

    这篇文章主要介绍了详解 Nginx如何配置Web服务器的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-04-04
  • 让Nginx支持shtml格式的配置方法

    让Nginx支持shtml格式的配置方法

    这篇文章主要介绍了让Nginx支持shtml格式的配置方法,shtml格式可以包含一些服务端指令,同PHP中的include功能类似,需要的朋友可以参考下
    2014-08-08
  • nginx简单配置多个server的方法

    nginx简单配置多个server的方法

    这篇文章主要介绍了nginx简单配置多个server的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • Nginx安装配置的实现示例

    Nginx安装配置的实现示例

    本文主要介绍了Nginx安装配置的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-12-12
  • Nginx使用ngx_http_upstream_module实现负载均衡功能示例

    Nginx使用ngx_http_upstream_module实现负载均衡功能示例

    本文主要介绍了Nginx使用ngx_http_upstream_module实现负载均衡功能示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08

最新评论