Nginx 1.17.6+ 支持 $pid 变量,可在 log_format 中输出 worker 进程 PID;需配置 custom 日志格式、启用 access_log 并重载生效,PID 为当前处理请求的 worker 系统进程号。

在 Nginx 中,可以通过 $pid 变量在自定义日志格式中输出当前处理请求的 Worker 进程 ID。
确认 Nginx 版本支持
$pid 变量从 Nginx 1.17.6 开始正式引入(对应 OpenResty 1.15.8.3+ 也支持)。低版本(如 1.16.x 或更早)不识别该变量,使用会报错:unknown "pid" variable。建议先运行 nginx -v 确认版本。
配置自定义日志格式并启用 $pid
在 http 或 server 块中定义日志格式,例如:
log_format custom_with_pid '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" $pid';
然后在需要的位置(如 server 或 location)启用该格式:
access_log /var/log/nginx/access.log custom_with_pid;
验证是否生效
重载 Nginx 配置:nginx -s reload,随后发起几次请求(如 curl http://localhost),再查看日志文件。每行末尾应出现一个数字,即当前 worker 进程的 PID,例如:
127.0.0.1 - - [10/Jul/2024:15:22:33 +0800] "GET / HTTP/1.1" 200 612 "-" "curl/8.5.0" 12345
可同时执行 ps -eo pid,comm | grep nginx 对照确认该数字确为活跃 worker 进程 PID。
注意事项
-
$pid输出的是 worker 进程的系统 PID,不是 master 进程 PID - 每个请求由某个 worker 独立处理,因此同一时刻不同请求可能记录不同 PID
- 若使用
worker_processes auto,PID 每次重启都会变化,不可用于长期追踪 - 不支持在
log_format外直接用于其他指令(如set或if),仅限日志上下文











