Linux / 疑难杂症 · 5 6 月, 2025 0

Nginx目录权限错误导致执行POST方法时出现Error500的解决方法

发生肾么了

用Nginx反向代理的WordPress,登录后台、查看文章没有问题,投稿一开始也没问题,但在进行了多次投稿(或保存草稿)操作后出现“500 Internal Server Error”,并且错误持续存在,无法继续正常投稿。

问题排查

查看Nginx错误日志/var/log/nginx/error.log,发现每当客户端执行POST方法时,后台都会出现如下错误信息:

2025/06/03 23:43:39 [crit] 57597#57597: *13 open() "/var/lib/nginx/tmp/client_body/0000000006" failed (13: Permission denied), client:...(省略)

注意到日志中出现了Permission denied,意味着某些Nginx使用的文件权限设置可能出现了问题。

最终解决

顺着错误日志中的/var/lib/nginx/tmp/client_body/0000000006向上寻找,最终锁定问题出现在/var/lib/nginx目录。该目录的所属用户为nginx,而在本例中,启动Nginx worker process的用户是wpusr

因此,用以下命令修改目录权限,问题解决。🎉

chown -R wpusr:root /var/lib/nginx

🤔咦?那为什么一开始的投稿没问题?

一种可能的情况是,Nginx会将较小的POST body直接缓存在内存中,而大小超过一定阈值的body才会写入client_body目录。多次编辑的文章所生成的POST body大小超过了阈值,Nginx开始尝试写文件,因而触发了权限错误。

该阈值可由Nginx配置文件中的client_body_buffer_size定义。如果服务器内存富裕,可手工修改为诸如client_body_buffer_size = 64k的较大值。