[Nginx]POST后出现500 open() "/var/lib/nginx/tmp/client_body/0000000001" failed (13: Permission denied)错误解决

2021-06-17 831点热度 0人点赞 0条评论

之前的文档配置过proxy buffer 缓存(文章详见:https://blog.terrynow.com/2021/04/27/nginx-proxy-tomcat-or-php-fpm-large-traffic-cause-connect-reset-by-peer-soved/)后,有遇到一个问题:

500错误,打开日志文件/var/log/nginx/error.log 后发现错误信息:open() "/var/lib/nginx/tmp/client_body/0000000001" failed (13: Permission denied)

根据Permission denied很可能是和/var/lib/nginx/tmp/client_body的文件夹权限有关。

检查/var/lib/nginx/tmp的文件夹权限:

[root@localhost nginx]# ls -l /var/lib/nginx/
total 4
drwxrwx--- 7 nginx root 4096 Apr 13 14:26 tmp

[root@localhost nginx]# ps aux|grep nginx
root 25490 0.0 0.0 105448 2204 ? Ss 15:36 0:00 nginx: master process /usr/sbin/nginx
tomcat 25491 0.0 0.0 105992 3500 ? S 15:36 0:00 nginx: worker process
tomcat 25492 0.0 0.0 106184 3728 ? S 15:36 0:00 nginx: worker process
tomcat 25493 0.0 0.0 105992 3740 ? S 15:36 0:00 nginx: worker process
tomcat 25494 0.0 0.0 105992 3744 ? S 15:36 0:00 nginx: worker process

# 看到上面实际的nginx运行用户是nginx

用户、用户组和nginx设置的用户不一样,因为之前要和tomcat整合,顺便在nginx.conf中修改了nginx的运行用户:

# 这里修改了用户,和/var/lib/nginx的文件的用户不一致
user tomcat;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;

所以解决办法是修改/var/lib/nginx 的权限(这里尝试过修改/var/lib/nginx/tmp的用户和用户组不行,一定要到上一级):

# 修改用户和用户组
chown tomcat:tomcat -R /var/lib/nginx/

当然如果你的nginx运行用户不是tomcat,而是其他的(例如www用户),那你只要修改相应的用户,只要nginx运行用户和/var/lib/nginx的用户权限一致就可以了。

admin

这个人很懒,什么都没留下

文章评论

您需要 登录 之后才可以评论