nginx 日志分析之 access.log 格式详解
2024-10-20 04:14:24
说明:access.log 的格式是可以自己自定义,输出的信息格式在nginx.conf中设置
一般默认配置如下:
http {
...
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
...
}
示例:
39.107.234.70 - - [02/Feb/2023:11:18:29 +0800] "POST /oauth/getJsapiToken HTTP/1.0" 200 109
"https://mapi.../reserved/index.html" "Mozilla/5....PhoneType/Phone mPaaSClient" "2409..., 36.156.119.45, 100.62.78.190, 10.145.210.210, 220.191.249.136"
日志参数详解:
$remote_addr 是离服务器“最近”的 IP。没有使用代理时,也就是客户端 IP。使用一层代理时,也就是代理的 IP。使用多层代理时,也就是最近一个(最靠近服务器)的代理的 IP。客户端IP 39.107.234.70
$remote_user 客户端用户名称 - -
$time_local 访问时间和时区 02/Feb/2023:11:18:29 +0800
$request 请求的URL和http协议 POST /oauth/getJsapiToken HTTP/1.0
$status http请求状态 200
$body_bytes_sent 客户端发送文件内容大小 109
$http_referer url跳转来源 "https://mapi.../reserved/index.html"
$http_user_agent 用户终端浏览器信息 "Mozilla/5....PhoneType/Phone mPaaSClient"
$http_x_forwarded_for 用以记录原有的客户端IP地址和原来客户端请求的服务器地址 "2409..., 36.156.119.45, 100.62.78.190, 10.145.210.210, 220.191.249.136"
http_x_forwarded_for说明:
假设将Nginx服务器作为Web服务器,位于负载均衡设备、Squid、Nginx反向代理之后,不能获取到客户端的真实IP地址了。
原因是经过反向代理后,由于在客户端和Web服务器之间增加了中间层,因此Web服务器无法直接拿到客户端的IP。
通过$remote_addr变量拿到的将是反向代理服务器的IP地址。 但是,反向代理服务器在转发请求的HTTP头信息中,可以增加X-Forwarded-For信息,
用以记录原有的客户端IP地址和原来客户端请求的服务器地址。
这时候,要用log_format指令设置日志格式,让日志记录X-Forearded-For信息中的IP地址,即客户的真实IP。
参考示例:
log_format access_json '{"@timestamp":"$time_local",'
'"host":"$server_addr",'
'"clientip":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"upstreamtime":"$upstream_response_time",'
'"upstreamhost":"$upstream_addr",'
'"http_host":"$host",'
'"uri":"$uri",'
'"domain":"$host",'
'"x_forwarded_for":"$http_x_forwarded_for",' //接收透传
'"X-Real-IP":"$remote_addr",'
'"referer":"$http_referer",'
'"tcp_xff":"$proxy_protocol_addr",'
'"http_user_agent":"$http_user_agent",'
'"status":"$status"}';
说明:此文档仅用于记录参考,不做其他用途
最新文章
- WPF 3D 知识点大全以及实例
- web系统登陆页面增加验证码
- 老王讲自制RPC框架.(二.动态代理)
- 实现图片的2次缩放后再进行candy边缘检测
- Cross-Browser HTML5 Placeholder Text
- Ambiguous handler methods mapped for HTTP path
- 深入理解 Spring 事务原理
- .NET序列化的一点技巧
- .NET的JSON格式数据的三种转换方式
- LinkedList的源码分析
- 原生js实现删除class和添加class
- linux下的~/
- 12-openldap使用AD密码
- 红黑树与AVL
- 从今天开始 每天记录HTML,CSS 部分的学习笔记
- Containerpilot 配置文件模板
- helm 安装prometheus operator 并监控ingress
- js事件在不同浏览器之间的差异
- React组件通信
- PHP7卓越性能背后的原理有哪些?