在nginx.conf全局块用pid指定绝对路径(如pid /run/nginx.pid),确保父目录存在、属主为root且权限合理,并同步更新systemd的pidfile配置,经语法检查和重启后即可生效。

直接在 nginx.conf 的全局块(main context)中用 pid 指令指定绝对路径,并同步确保目录存在、属主正确、权限合理,就能避免常见权限报错。
修改 pid 路径的正确写法
打开 /etc/nginx/nginx.conf 或你的主配置文件,在最顶部(events 块之前)添加或修改这一行:
pid /run/nginx.pid;
- 必须是绝对路径,不能写
pid logs/nginx.pid或pid ./nginx.pid - 推荐使用
/run/nginx.pid(systemd 系统默认运行时目录),比/var/run/nginx.pid更规范(二者实际是同一目录的符号链接) - 若需自定义,如多实例部署,可用
pid /run/nginx-api.pid;,但每个实例路径必须唯一
确保目录存在且权限到位
Nginx 主进程以 root 身份启动,但它需要能创建和更新该文件。关键不是文件本身,而是其父目录:
- 执行
mkdir -p /run/nginx(如果用/run/nginx.pid,则父目录是/run;该目录通常已存在且 root 可写) - 若用自定义路径如
/var/run/my-nginx/nginx.pid,需手动创建目录:mkdir -p /var/run/my-nginx - 设置属主:
chown root:root /var/run/my-nginx - 设置权限:
chmod 0755 /var/run/my-nginx(至少保证 root 可写) - 避免放在 NFS、只读挂载点或
/tmp等可能被清理的位置
与 systemd 单元保持一致
如果你用 systemctl start nginx 启动,必须让 systemd 知道新的 pid 路径:
- 编辑
/etc/systemd/system/nginx.service(或发行版对应路径) - 确认
PIDFile=行与nginx.conf中的pid指令完全一致,例如:
PIDFile=/run/nginx.pid - 修改后运行:
systemctl daemon-reload
验证与生效步骤
改完配置别急着重启,按顺序检查:
- 语法测试:
nginx -t—— 必须显示success,否则会启动失败 - 确认目录可写:
ls -ld $(dirname /run/nginx.pid),输出中应有drwxr-xr-x且属主为root - 停掉旧进程(如有):
nginx -s stop或systemctl stop nginx - 启动:
nginx或systemctl start nginx - 验证 pid 文件是否生成:
cat /run/nginx.pid并比对ps aux | grep 'nginx: master'输出的 PID 是否一致











