【nginx】记录response body和header到access.log

1 背景

netstub项目中,需要记录经过网关的请求信息到日志,供loki采集,以便后续的统计分析工作。

需要记录请求的request_body, request_header,  response_body, response_header数据到access.log。

本文记录一下配置过程。

2 配置

2.1 记录请求url

配置nginx配置文件default.conf ,使用nginx内置变量 $host$request即可获得url数据

log_format main escape=json  '{'
                                '"host": "$host",'
                                '"request": "$request"'
                                '}' ;
access_log  /var/log/nginx/access.log  main;

2.2 记录请求body和header

① body:配置中打开lua_need_body_request on 即可将request_body 记录到$request_body变量

② header:header数据需要在header_filter_by_lua_block阶段中手动赋值,读取请求中的header信息赋值给

### 解决方案概述 当遇到 `upstream prematurely closed connection while reading response header from upstream` 错误时,这通常意味着 Nginx 尝试从上游服务器获取响应头时,上游服务器意外终止了连接[^1]。此问题可能由多种因素引起,包括但不限于配置不当、资源不足或应用程序内部错误。 #### 配置调整建议 为了缓解这一情况,可以考虑以下几个方面: - **增加超时时间** 调整 Nginx 的超时参数可以帮助防止因短暂延迟而导致的连接中断。具体来说,可以通过修改如下几个指令来延长等待时间: ```nginx proxy_read_timeout 300; fastcgi_read_timeout 300; uwsgi_read_timeout 300; ``` - **优化缓冲区大小** 如果应用返回的数据量较大,则适当增大缓冲区尺寸有助于减少此类错误的发生频率。例如: ```nginx client_body_buffer_size 8k; proxy_buffers 8 16k; proxy_buffer_size 32k; ``` - **启用 KeepAlive 连接** 启用持久化 HTTP 连接能够有效降低频繁建立新连接带来的开销,并提高整体性能表现。可以在 server 或 location 块内加入以下语句实现该功能: ```nginx keepalive_timeout 65; keepalive_requests 100; ``` #### 应用层处理措施 除了上述针对 Nginx 自身所做的改动外,在某些情况下还需要检查并修正后端服务的行为模式。比如对于 Python Web 框架而言,确保 WSGI 容器(如 uWSGI)正常运行至关重要;而对于 Java EE 平台上的项目则需关注 Tomcat/Jetty 等容器的状态监控与调优工作。 另外值得注意的是,如果使用了异步编程模型的应用程序可能会因为协程调度不合理而引发类似的异常现象。此时应仔细审查业务逻辑代码中的并发控制部分,必要时引入锁机制或其他同步手段加以改进[^4]。 #### 日志分析技巧 面对难以定位的问题源时,深入挖掘日志文件往往能提供宝贵线索。特别是查看 Nginx error log access log记录的时间戳以及请求路径等信息,对比前后端交互过程中是否存在明显差异点。同时也可以借助第三方工具如 ELK Stack 来集中管理可视化展示多节点的日志数据流,从而更高效地完成故障诊断流程[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值