Nginx 403 Forbidden 的一个解决思路
迁移项目到新电脑上,同样的 Nginx 配置,结果在新电脑上发现了一个问题:
所有的资源文件(js/image/css等)报 403 Forbidden 错误。
因为配置文件一模一样,所以开始以为是 Nginx 版本问题,搜了一下网上没发现这个问题。
于是打开 Nginx 的错误日志,发现:
2022/08/04 01:01:57 [error] 11175#0: *7 open() "/Users/tony/xxx/vendors/moment/min/moment.min.js" failed (13: Permission denied), client: 127.0.0.1, server: dev.xxx.com, request: "GET /vendors/moment/min/moment.min.js HTTP/1.1", host: "dev.xxx.com", referrer: "http://dev.xxx.com/auth/login?ref=/ops"
根据 Permission denied,可以知道是 Nginx 没有文件的访问权限。
于是设置整个资源文件夹为 777,仍然无效。
那就只有一个可能了。
执行 ps aux | grep nginx ,发现:
nginx 的子进程竟然是 nobody 用户…
于是修改 nginx.conf 里的用户配置,改为
user tony;
保存,检查配置文件,sudo nginx -t ,结果报错,提示:
nginx:[emerg] getgrnam("tony") failed in /xxx/xxx/nginx.conf
原来,user 配置需要两个参数,一个是用户名,一个是用户组。
默认用户名=用户组名,所以实际生效的是 user tony tony
,而实际并没有 tony 这个用户组,所以在执行 getgrnam(ger group name)
的时候就报错了。
最终改为:
user tony staff;
重启 Nginx,问题解决。