支持$pid需满足:nginx≥1.19.10、编译含http-log-module,并在log_format中使用$pid变量;其值为写入日志时worker进程pid,非请求全程唯一标识,适合日志归属识别,精准追踪应配合$request_id。

可以在 access_log 中记录处理请求的 worker 进程 PID,但需满足版本和配置条件:Nginx ≥ 1.19.10、启用 http-log-module,并在 log_format 中使用 $pid 变量。
确认环境是否支持 $pid
执行以下命令验证:
- nginx -v —— 查看版本,必须为 1.19.10 或更高
- nginx -V 2>&1 | grep -o 'with-http-log-module' —— 确保输出存在,表示日志模块已编译启用
配置含 PID 的日志格式
在 http 块中定义自定义格式,例如:
log_format with_pid '$pid - $remote_addr - [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent"';
然后在 server 或 location 块中启用:
access_log /var/log/nginx/access.log with_pid;
理解 $pid 的实际含义
$pid 记录的是写入该条日志时当前 worker 进程的 PID,不是整个请求生命周期中唯一固定的处理者。由于长连接复用、子请求分发或 upstream 转发等机制,单个请求可能涉及多个 worker,因此 $pid 更适合用于识别日志行生成者,而非请求全程归属。
若需精准追踪请求路径,应配合 $request_id 使用,并与后端服务日志对齐。
验证配置是否生效
重载配置:nginx -s reload;触发一次 HTTP 请求;再执行:
tail -n 1 /var/log/nginx/access.log
观察首字段是否为数字(即进程号),例如:12345 - 192.168.1.100 - [03/Sep/2026:13:28:00 +0000] "GET / HTTP/1.1" 200 612 ...











