随笔 - 178  文章 - 0  评论 - 19  阅读 - 54万

nginx 日志分析之 access.log 格式详解

说明: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"}'; 
复制代码

 

说明:此文档仅用于记录参考,不做其他用途

 

posted on   wangzy-Zj  阅读(2865)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 使用C#创建一个MCP客户端
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
历史上的今天:
2021-02-02 sublime 转换中文格式
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示