Nginx 的 pid 文件是存放主进程 PID 的单个文本文件,非文件夹;必须在 nginx.conf 全局块用绝对路径配置(如 pid /run/nginx.pid;),目录需存在且 Nginx 有写权限,多实例须隔离路径。

Nginx 本身没有“pid 文件夹”,它只生成一个 PID 文件(如 /run/nginx.pid),用来存放主进程的进程 ID(PID),而不是一个目录。
这个文件是普通文本文件,内容只有一行数字,例如:
12345
代表当前 Nginx 主进程(master process)的 PID。
PID 文件怎么存放?关键三点:
-
路径由
pid指令指定
必须写在nginx.conf的最外层(main context),例如:pid /run/nginx.pid;
不能放在
http{}、server{}或events{}块里,否则无效。 -
目录需提前存在,且 Nginx 主进程有写权限
比如用/run/nginx.pid,就要确保/run可写(通常 root 权限下没问题);
若用/var/run/nginx.pid,目录/var/run一般已存在;
若自定义路径如/opt/nginx/run/nginx.pid,则需手动创建目录并赋权:sudo mkdir -p /opt/nginx/run sudo chown root:root /opt/nginx/run
文件由 Nginx 自动创建和更新,不需手动建或维护
启动时写入 PID,重启/重载时自动覆盖,停止时不会自动删除。
所以旧 PID 文件残留是常见问题,可能导致nginx -s reload报错no nginx.pid file或发错信号。
常见存放位置(按优先级推荐)
✅
/run/nginx.pid
systemd 系统默认运行时路径,语义清晰,重启自动清空,配合RuntimeDirectory=nginx最稳妥。✅
/var/run/nginx.pid
符合 FHS 标准,兼容性好,但需确认系统启动时该目录已就绪。⚠️
/usr/local/nginx/logs/nginx.pid
源码编译安装的常见默认路径,但/usr/local/nginx/logs/本用于日志,混放 PID 不够规范,也不利于 systemd 集成。❌
/tmp/nginx.pid
容易被系统清理机制(如systemd-tmpfiles或tmpwatch)误删,不推荐。
多实例部署时怎么处理?
每个实例必须用独立 PID 文件路径,例如:
# API 实例 pid /run/nginx-api.pid; # Web 实例 pid /run/nginx-web.pid;
对应启动命令也要区分配置文件:
nginx -c /etc/nginx/api.conf nginx -c /etc/nginx/web.conf
管理命令也得带上 -c,否则会读错 PID 文件。
怎么验证是否生效?
-
修改配置后执行:
nginx -t # 检查语法 nginx -s reload # 或 systemctl reload nginx
-
查看文件是否存在且内容正确:
cat /run/nginx.pid ps -p $(cat /run/nginx.pid) -o pid,comm,args
确保输出中
comm是nginx,且args含master process。
Nginx 的 PID 管理不复杂,但容易忽略路径、权限和上下文这三处细节。


















