如何通过Nginx内置变量 $request_completion 准确判断客户端请求是否完整记录到日志?
- 内容介绍
- 文章标签
- 相关推荐
本文共计993个文字,预计阅读时间需要4分钟。
Nginx 的 `$request_completion` 变量用于标识当前请求是否已被完整处理(即客户端端已正常接收完所有数据,Nginx 也已完成响应)。在日志中,它有助于识别因网络中断、客户端提前关闭连接、超时或主动取消导致的请求不完整问题。这对于排查前端加载失败、API调用异常、埋点丢失等问题非常实用。
理解 $request_completion 的取值逻辑
该变量仅在请求结束时(log 阶段)可用,取值为:
- "OK":请求完整处理完成,包括客户端发完所有请求体(如 POST 数据)、服务端返回完整响应、TCP 连接正常关闭;
-
空字符串(""):请求未完成,常见于客户端断连、读取请求体超时(
client_body_timeout)、发送响应中途断开、或 worker 进程被强制终止等场景。
注意:$request_completion 不反映 HTTP 状态码是否为 2xx,即使返回 500,只要流程走完、响应发出,它仍为 "OK";反之,即使返回 200,若客户端在响应写入一半时关闭连接,它就是空值。
本文共计993个文字,预计阅读时间需要4分钟。
Nginx 的 `$request_completion` 变量用于标识当前请求是否已被完整处理(即客户端端已正常接收完所有数据,Nginx 也已完成响应)。在日志中,它有助于识别因网络中断、客户端提前关闭连接、超时或主动取消导致的请求不完整问题。这对于排查前端加载失败、API调用异常、埋点丢失等问题非常实用。
理解 $request_completion 的取值逻辑
该变量仅在请求结束时(log 阶段)可用,取值为:
- "OK":请求完整处理完成,包括客户端发完所有请求体(如 POST 数据)、服务端返回完整响应、TCP 连接正常关闭;
-
空字符串(""):请求未完成,常见于客户端断连、读取请求体超时(
client_body_timeout)、发送响应中途断开、或 worker 进程被强制终止等场景。
注意:$request_completion 不反映 HTTP 状态码是否为 2xx,即使返回 500,只要流程走完、响应发出,它仍为 "OK";反之,即使返回 200,若客户端在响应写入一半时关闭连接,它就是空值。

