在nginx日志的access log中记录post请求的参数值

本文介绍如何在Nginx中配置记录POST请求的参数,通过定义特定的日志格式来帮助开发者更好地排查问题。这对于移动互联网行业的服务端开发尤为重要。

背景:有时程序偶出现参数少了或没有提交到下一个链接Url里后出现问题,如何查呢,最好的办法是在nginx上的加post参数,以定位到问题才有可能对某个UIR的代码出现的问题进行排查。
og_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
access_log logs/test.access.log access;

注意放的位置在http里:nginx: [warn] the "log_format" directive may be used only on "http" level in /usr/local/nginx/conf/vhost/xxx.conf:59
nginx.conf
http里定义:wwwlog
   log_format  wwwlog  '$remote_addr - $remote_user [$time_local] "$request" '                                                                                                                      
              '$status $body_bytes_sent "$http_referer" '
              '"$http_user_agent" $http_x_forwarded_for "$request_time"';

在include每个域名里后面加上wwwlog:
access_log  /data/logs/access_mytv.log wwwlog; 

于是在同样的access后这样写:

  1. nginx.conf  
  2. log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';  
  3.   
  4. 包含的justwinit.conf:  
  5. access_log  /data/logs/access_mytv.log access  


日志如下:
202.108.16.77 - - [14/Jan/2015:10:45:45 +0800] "POST /partin/releaseinfo HTTP/1.1" 302 5 id=47&choice_type=new&eid=338&videoid=5d6dabda-9b97-11e4-9584-21fa84a4ab6e&file_ext=mp4&lang=zh&upload_server=202.108.17.15&title=7%E5%B2%81%E5%B0%8F%E5%AD%A9%E9%85%92%E7%93%B6%E4%B8%8A%E5%81%9A%E4%BF%AF%E5%8D%A7%E6%92%91%E8%B9%BF%E7%BA%A2%E7%BD%91%E7%BB%9C&desc=7%E5%B2%81%E5%B0%8F%E5%AD%A9%E9%85%92%E7%93%B6%E4%B8%8A%E5%81%9A%E4%BF%AF%E5%8D%A7%E6%92%91%E8%B9%BF%E7%BA%A2%E7%BD%91%E7%BB%9C&tags=%E6%B5%8B%E8%AF%95%E4%B8%80%E4%B8%8B%E3%80%82&checkflag=on "http://justwinit.cn/partin/showupload/activityid/47" "Mozilla/5.0 (Windows NT 6.1; rv:34.0) Gecko/20100101 Firefox/34.0" -

POST URI及参数:POST /partin/releaseinfo HTTP/1.1" 302 5  .....
来自的refer Uri:http://justwinit.cn/partin/showupload/activityid/47


这个access_log的log_format应该可以定义多个不同的名供不同日志的需求。

再就是,
get请求的参数就是存放在http header中的,所以修改header的大小限制 当然可以解决请求串过长的问题啦。

移动互联网行业开发过程中,服务端经常会需要检查是否收到请求,收到什么样的请求,最简单的办法就是看nginx的access log,常见的nginx配置中access log一般都只有GET请求的参数,而POST请求的参数却不行。
http://wiki.nginx.org/NginxHttpCoreModule#.24request_body

    $request_body

    This variable(0.7.58+) contains the body of the request. The significance of this variable appears in locations with directives proxy_pass or fastcgi_pass. 

正如上文件所示,只需要使用$request_body即可打出post的数据,在现存的server段加上下面的设置即可:


    log_format access '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent $request_body "$http_referer" "$http_user_agent" $http_x_forwarded_for';
    access_log logs/test.access.log access;

来自:http://www.54chen.com/web-ral/nginx-access-log-post.html

 

<think> 我们正在讨论Nginxaccess.log文件。根据用户的问题,他/她想知道access.log文件记录的是什么日志。结合引用内容,我们可以从以下几个方面回答: 1. access.log的定义和作用:它是Nginx服务器记录所有客户端访问请求日志文件。 2. 日志内容:包含每次请求的详细信息,如客户端IP、请求时间、请求方法、状态码等。 3. 日志格式:可以是默认的combined格式,也可以自定义(如引用[3]中的自定义格式)。 4. 日志位置:默认在/var/log/nginx/access.log,但可以配置(引用[1]和[2]提到路径和权限设置)。 接下来,我们将详细解释每个字段的含义,并参考引用内容进行说明。 我们注意到引用[1]详细介绍了如何查看日志,引用[2]讲了如何按日期分割日志,引用[3]展示了一个自定义日志格式的例子。这些引用内容帮助我们理解日志的存储、配置和格式。 现在,我们将按照以下结构组织回答: - 首先说明access.log是什么,记录什么内容。 - 然后详细解释日志中的每个字段(基于常见的combined格式,同时参考引用[3]的自定义格式)。 - 最后说明日志的位置和配置方法。 同时,我们需要在回答中适当添加引用标识。 注意:用户提供的日志示例中包含了多个请求记录,我们可以用这些示例来解释字段。 </think>### Nginx `access.log` 文件日志详解 Nginx 的 `access.log` 文件记录服务器处理的所有 **HTTP 请求访问信息**,主要用于跟踪客户端请求、分析流量模式和诊断问题。以下是其核心功能与内容解析: --- ### 一、核心记录内容 1. **基本请求信息** - 客户端 IP 地址(如 `120.77.139.23`) - 请求时间戳(如 `[17/Nov/2025:08:17:01 +0800]`) - HTTP 方法(`GET`/`POST`)和请求路径(如 `/healthcheck-web-client/wx/api/inst/branch/list`) - HTTP 协议版本(如 `HTTP/1.1`) - 服务器返回的 **HTTP 状态码**(如 `200` 表示成功)[^1] 2. **流量与性能数据** - 响应体大小(单位:字节,如 `62`) - 引用来源页(`Referer`,如 `"https://hljktj.boe.com/oss/mall/..."`) - 客户端设备信息(`User-Agent`,如 `"Mozilla/5.0 (iPhone; ..."`)[^3] 3. **自定义扩展字段**(需配置) - 响应时间(`$request_time`) - 代理后端服务器地址(`$upstream_addr`) - 连接标识(`$connection`)等(如引用[3]的 `log_format` 配置)[^3] --- ### 二、日志示例解析 以用户提供的一条记录为例: ```nginx 120.77.139.23 - - [17/Nov/2025:08:17:01 +0800] "GET /healthcheck-web-client/wx/api/inst/branch/list?stationId=HL20036 HTTP/1.1" 200 62 "https://hljktj.boe.com/oss/mall/exam-detail.html?id=1278071&parentfrom=1&hlsource=hospitalDetail&examsource=hospitalsetlist" "Mozilla/5.0 (iPhone; CPU iPhone OS 18_5 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Mobile/15E148 MicroMessenger/8.0.65(0x18004129) NetType/4G Language/zh_CN" ``` | 字段 | 含义 | |-------------------|----------------------------------------------------------------------| | `120.77.139.23` | 客户端 IP 地址 | | `[17/Nov/2025:08:17:01 +0800]` | 请求时间(2025年11月17日,北京时间08:17:01) | | `GET ... HL20036` | GET 请求的 API 接口路径和参数 | | `200` | 服务器返回成功状态码 | | `62` | 响应体大小为 62 字节 | | `"https://hljktj.boe.com/..."` | 用户来源页面(从体检详情页跳转而来) | | `"Mozilla/5.0 ..."` | 客户端为 iPhone 微信浏览器(iOS 18.5,微信版本 8.0.65,使用 4G 网络) | --- ### 三、核心作用与价值 1. **流量分析** - 统计高频访问接口(如示例中的 `/healthcheck-web-client` 相关 API) - 识别热门页面和用户来源渠道(`Referer` 字段)[^1] 2. **故障排查** - 通过状态码定位问题: - `4xx`(如 `404`)表示客户端错误 - `5xx`(如 `502`)表示服务端错误 3. **安全监控** - 检测异常 IP 的暴力请求 - 识别恶意爬虫(异常 `User-Agent`) 4. **性能优化** - 结合自定义字段(如 `$request_time`)分析接口响应延迟[^3] --- ### 四、日志文件位置与管理 - **默认路径**:`/var/log/nginx/access.log`(Linux 系统)[^1] - **查看方法**: ```bash tail -f /var/log/nginx/access.log # 实时跟踪最新日志 cat /var/log/nginx/access.log # 查看完整日志 ``` - **自定义配置**: - 按日期分割日志(如引用[2]的配置) - 修改日志格式(如引用[3]的 `log_format` 指令)[^2][^3] --- ### 五、与 `error.log` 的区别 | **access.log** | **error.log** | |-------------------------------|--------------------------------| | 记录所有客户端请求 | 仅记录服务端错误和警告 | | 关注请求细节和响应状态 | 关注服务崩溃、配置错误等异常 | | 用于行为分析和流量统计 | 用于故障诊断和系统维护 | --- ### 相关问题 1. 如何配置 Nginx 按日期自动分割 `access.log` 文件?[^2] 2. 有哪些工具可以高效分析 Nginx 访问日志(如 `awk`、ELK 堆栈)? 3. 在 `access.log` 中出现大量 `499` 状态码可能是什么原因?如何解决? 4. 如何通过日志识别恶意爬虫流量并配置防护规则? [^1]: 访问日志路径与基础查看方法 [^2]: 日志按日期分割与权限配置 [^3]: 自定义日志格式与高级
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值