发生肾么了
用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
的较大值。