怎么利用 $request_completion 变量在日志中精准标记并监控未完整下载便被用户中止的文件请求

阿强君_1339

阿强君_1339

2026-06-23

1008人浏览

原创

$request_completion无法精准识别用户主动中止下载,因其failed状态包含超时、断连等多种原因;需结合$bytes_sent、$status等变量交叉判断,并推荐前端埋点+后端心跳方案实现准确定位。

怎么利用 $request_completion 变量在日志中精准标记并监控未完整下载便被用户中止的文件请求

直接看 $request_completion 变量本身并不能精准标记“用户中止下载”的请求——它只区分请求是否被 Nginx 正常完成(OK)或异常终止(FAILED),而 FAILED 包含超时、后端断连、客户端主动关闭等多种原因,无法单独识别“用户点击暂停/关闭下载窗口”这类行为。

理解 $request_completion 的实际含义

该变量是 Nginx 内置变量,取值只有两个:

  • OK:请求被完整处理并成功返回响应体(无论状态码是 200、304 还是 4xx/5xx,只要响应头+体发完就算 OK)
  • FAILED:连接在响应发送过程中被意外中断(如客户端断开、超时、worker crash 等),Nginx 未能完成响应发送

注意:FAILED 不等于“用户点了取消”。比如用户下载到 80% 时关掉浏览器,Nginx 通常记录为 FAILED;但若后端 PHP 脚本卡死导致超时,也会记为 FAILED——两者在日志里无法区分。

用 $status + $bytes_sent + $request_completion 组合判断可疑中止

单靠 $request_completion 不够,需结合其他变量交叉分析。重点关注大文件(如 >1MB)的响应:

Pixie.haus
Pixie.haus

一款面向像素艺术创作的AI图像生成平台,帮助用户快速制作像素风格图片和适合游戏等项目使用的视觉素材。

下载
  • 当 $request_completion = FAILED 且 $bytes_sent > 0 且 $bytes_sent → 很可能是用户中途断开(未发完就断)
  • 同时检查 $status:若为 206(范围请求)且 $bytes_sent 明显小于预期分块大小,也指向主动中断
  • Nginx 日志格式示例:
    log_format download_log '$time_iso8601 $remote_addr "$request" $status $bytes_sent $request_completion $http_range';

配合 access_log 条件记录,减少噪音

避免把所有 FAILED 都记为“用户中止”,可用 map + if(在 log 指令中)做轻量过滤:

map $request_completion $is_aborted_download {
    default "";
    FAILED "$bytes_sent";
}
log_format abort_log '$time_iso8601 $uri $is_aborted_download $http_user_agent';
access_log /var/log/nginx/aborted-downloads.log abort_log if=$is_aborted_download;

这样只记录 FAILED 且有数据发出的请求,排除了纯连接失败($bytes_sent=0)的情况。

更可靠的替代方案:前端埋点 + 后端心跳

真正想 100% 确认用户主动中止,Nginx 层做不到。推荐组合方案:

  • 前端 JS 监听 beforeunload 或 visibilitychange,在用户关闭页面/切走前上报下载 ID 和已接收字节数
  • 服务端生成带唯一 trace_id 的下载链接,并记录文件大小;收到前端上报后比对已传字节,确认是否提前终止
  • Nginx 日志作为辅助(用 $request_completion 发现异常链路),而非唯一依据

这样既能准确定位真实中止行为,又能回溯具体用户、设备、网络环境等上下文。

相关专题

更多
nginx 重启
nginx 重启

nginx重启对于网站的运维来说是非常重要的,根据不同的需求,可以选择简单重启、平滑重启或定时重启等方式。本专题为大家提供nginx重启的相关的文章、下载、课程内容,供大家免费下载体验。

2023.07.27

383

5

nginx 配置详解
nginx 配置详解

Nginx的配置是指设置和调整Nginx服务器的行为和功能的过程。通过配置文件,可以定义虚拟主机、HTTP请求处理、反向代理、缓存和负载均衡等功能。Nginx的配置语法简洁而强大,允许管理员根据自己的需要进行灵活的调整。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

2023.08.04

3227

6

nginx配置详解
nginx配置详解

NGINX与其他服务类似,因为它具有以特定格式编写的基于文本的配置文件。本专题为大家提供nginx配置相关的文章,大家可以免费学习。

2023.08.04

5885

6

tomcat和nginx有哪些区别
tomcat和nginx有哪些区别

tomcat和nginx的区别:1、应用领域;2、性能;3、功能;4、配置;5、安全性;6、扩展性;7、部署复杂性;8、社区支持;9、成本;10、日志管理。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.02.23

561

5

nginx报404怎么解决
nginx报404怎么解决

当访问 nginx 网页服务器时遇到 404 错误,表明服务器无法找到请求资源,可以通过以下步骤解决:1. 检查文件是否存在且路径正确;2. 检查文件权限并更改为 644 或 755;3. 检查 nginx 配置,确保根目录设置正确、没有冲突配置等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.07.09

1476

5

Nginx报404错误解决方法
Nginx报404错误解决方法

解决方法:只需要加上这段配置:try_files $uri $uri/ /index.html;即可。想了解更多Nginx的相关内容,可以阅读本专题下面的文章。

2024.08.07

3938

3

nginx部署php项目教程汇总
nginx部署php项目教程汇总

本专题整合了nginx部署php项目教程汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

122

12

nginx配置文件详细教程
nginx配置文件详细教程

本专题整合了nginx配置文件相关教程详细汇总,阅读专题下面的文章了解更多详细内容。

2026.01.13

437

23

Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建
Nginx跨平台安装实操指南:Windows、macOS与Linux环境快速搭建

本指南详解Nginx在Windows、macOS及Linux系统的安装全流程。涵盖官方包解压、Homebrew一键部署、APT/YUM源配置及Docker容器化方案。无论新手或开发者,均可快速搭建运行环境,掌握跨平台核心指令,为后续配置与调优奠定坚实基础。

2026.03.16

159

12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.4万人学习