通过在 log_format 中添加 $pipe 变量可标记 HTTP pipelining 请求,值为 p(流水线)或 .(普通),仅 Nginx 1.1.4+ 支持,需定义日志格式并应用至 access_log,再 reload 验证。

直接在 log_format 中加入 $pipe 变量,就能在访问日志里明确标记每个请求是否为 HTTP pipelining 发送。这个变量值只有两种:p 表示流水线请求,. 表示普通请求。关键在于它必须放在日志格式定义中,且只在 Nginx 1.1.4 及以上版本生效。
确认 Nginx 版本并启用 $pipe
$pipe 是内置变量,无需额外编译模块,但必须确保 Nginx 版本 ≥ 1.1.4。可通过以下命令验证:
-
nginx -v查看当前版本 - 若低于要求,请升级 Nginx 再继续配置
定义含 $pipe 的自定义日志格式
在 http 块中添加新 log_format,把 $pipe 插入合适位置(通常放在末尾便于提取):
log_format pipeline '$remote_addr - $remote_user [$time_local] '
'"$request" $status $body_bytes_sent '
'"$http_referer" "$http_user_agent" $pipe $connection';注意:$pipe 不能出现在 rewrite 或 proxy_set_header 中,仅限日志、if、map 等处理阶段使用。
将新格式应用到 access_log
在 server 或 location 块中指定该格式:
access_log /var/log/nginx/pipeline.log pipeline;- 确保日志路径有写入权限,必要时创建目录并赋权
- 重载配置:
nginx -s reload
验证与初步分析
发起测试请求后,检查日志是否出现 p 或 .:
- 用
curl模拟流水线(需自定义 TCP 工具或旧版客户端,浏览器默认禁用) - 执行
tail -f /var/log/nginx/pipeline.log实时观察 - 快速筛选所有流水线请求:
awk '$12 == "p"' /var/log/nginx/pipeline.log(字段数依实际格式调整)

















