open() "/root/project/static/*.css" 失败(13:权限被拒绝)nginx
open() "/root/project/static/*.css" failed (13: Permission denied) nginx
我已经用 uwsgi, django, nginx
设置了我的项目 一切似乎都工作正常,但不知何故我一直在获取 static files
时遇到错误 我一直在网上阅读并尝试了所有可能的方法但我一直在我的静态文件夹中收到此 permission denied
错误。
谁能告诉我我在权限方面做错了什么以及我应该如何更改它?
这是我的/var/log/nginx/error.log
open() "/root/project/static/*.css" failed (13: Permission denied), client: 2xx.xx.xx.xxx, server: _, request: "GET /static/*.css HTTP/1.1", host: "1xx.xx.xx.xxx"
这是我的nginx site-available config
server {
listen 80 default_server;
listen [::]:80 default_server;
# root /var/www/html;
# Add index.php to the list if you are using PHP
# index index.html index.htm index.nginx-debian.html;
server_name _;
#location = /favicon.ico { access_log off; log_not_found off; }
#location /media {
# root /root/project/mediafiles;
#}
location ^~ /static/ {
allow all; # this is from one of the posts but no luck
auth_basic off; # this is from one of the posts but no luck
root /root/project;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi/project.sock;
}
}
作为我的文件夹权限
项目文件夹是 drwxr-xr-x 23 www-data www-data
对于静态文件夹,它是 drwxr-x--- 8 www-data www-data 4096 May 23 14:40 static
我也从未授予静态 755
权限,但运气不好。
无论如何,这是使用 root 作为用户而不是有一个额外的用户并且 root 也在 www-data
组中
在此先感谢您的帮助。
编辑:
正如所建议的那样,这是 ps aux | grep nginx
的输出
root 810 0.0 0.0 124972 1440 ? Ss 02:18 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 811 0.0 0.0 125688 4840 ? S 02:18 0:00 nginx: worker process
www-data 812 0.0 0.0 125348 3196 ? S 02:18 0:00 nginx: worker process
root 1159 0.0 0.0 14224 1004 pts/0 S+ 04:25 0:00 grep --color=auto nginx
我猜测的问题是您的项目 root
目录位于 /root
。 /root
的默认权限是:
drwx------ 14 root root 4096 May 8 12:47 root
如您所见,www-data
等其他用户甚至没有 /root
目录的读取权限。在 Linux FS 中,如果您需要读取某个路径中的内容/a/b/c
,您需要对该路径中的每个文件夹具有读取权限。
Nginx 工作进程以用户 www-data
身份运行,该用户试图打开根目录为 /root
的文件,该用户没有读取权限,因此引发 Permission denied (13)
.
有关详细信息,请参阅此演示:
$ cat /root/test2/text.txt
cat: /root/test2/text.txt: Permission denied
$ sudo cat /root/test2/test.txt
A
$ sudo ls -la /root/ | grep test2
drwxrwxrwx 2 root root 4096 May 24 02:04 test2
希望这是有道理的。解决方案将是以下之一:
- 运行 nginx worker 为 root(不推荐)
- 将您的项目目录移动到专供多个用户访问的位置,例如
/usr/local/share
或 /var/www/
(推荐)
我也遇到了同样的问题。我在 Centos 7.6 上的 nginx 服务器无法访问路径 /home/user/app/mysyte/static/
中的静态文件夹。 /var/log/nginx/error.log
同样的错误 open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)
要解决此问题,请查看此 page 问题 2
我已经用 uwsgi, django, nginx
设置了我的项目 一切似乎都工作正常,但不知何故我一直在获取 static files
时遇到错误 我一直在网上阅读并尝试了所有可能的方法但我一直在我的静态文件夹中收到此 permission denied
错误。
谁能告诉我我在权限方面做错了什么以及我应该如何更改它?
这是我的/var/log/nginx/error.log
open() "/root/project/static/*.css" failed (13: Permission denied), client: 2xx.xx.xx.xxx, server: _, request: "GET /static/*.css HTTP/1.1", host: "1xx.xx.xx.xxx"
这是我的nginx site-available config
server {
listen 80 default_server;
listen [::]:80 default_server;
# root /var/www/html;
# Add index.php to the list if you are using PHP
# index index.html index.htm index.nginx-debian.html;
server_name _;
#location = /favicon.ico { access_log off; log_not_found off; }
#location /media {
# root /root/project/mediafiles;
#}
location ^~ /static/ {
allow all; # this is from one of the posts but no luck
auth_basic off; # this is from one of the posts but no luck
root /root/project;
}
location / {
include uwsgi_params;
uwsgi_pass unix:/tmp/uwsgi/project.sock;
}
}
作为我的文件夹权限
项目文件夹是 drwxr-xr-x 23 www-data www-data
对于静态文件夹,它是 drwxr-x--- 8 www-data www-data 4096 May 23 14:40 static
我也从未授予静态 755
权限,但运气不好。
无论如何,这是使用 root 作为用户而不是有一个额外的用户并且 root 也在 www-data
在此先感谢您的帮助。
编辑:
正如所建议的那样,这是 ps aux | grep nginx
root 810 0.0 0.0 124972 1440 ? Ss 02:18 0:00 nginx: master process /usr/sbin/nginx -g daemon on; master_process on;
www-data 811 0.0 0.0 125688 4840 ? S 02:18 0:00 nginx: worker process
www-data 812 0.0 0.0 125348 3196 ? S 02:18 0:00 nginx: worker process
root 1159 0.0 0.0 14224 1004 pts/0 S+ 04:25 0:00 grep --color=auto nginx
我猜测的问题是您的项目 root
目录位于 /root
。 /root
的默认权限是:
drwx------ 14 root root 4096 May 8 12:47 root
如您所见,www-data
等其他用户甚至没有 /root
目录的读取权限。在 Linux FS 中,如果您需要读取某个路径中的内容/a/b/c
,您需要对该路径中的每个文件夹具有读取权限。
Nginx 工作进程以用户 www-data
身份运行,该用户试图打开根目录为 /root
的文件,该用户没有读取权限,因此引发 Permission denied (13)
.
有关详细信息,请参阅此演示:
$ cat /root/test2/text.txt
cat: /root/test2/text.txt: Permission denied
$ sudo cat /root/test2/test.txt
A
$ sudo ls -la /root/ | grep test2
drwxrwxrwx 2 root root 4096 May 24 02:04 test2
希望这是有道理的。解决方案将是以下之一:
- 运行 nginx worker 为 root(不推荐)
- 将您的项目目录移动到专供多个用户访问的位置,例如
/usr/local/share
或/var/www/
(推荐)
我也遇到了同样的问题。我在 Centos 7.6 上的 nginx 服务器无法访问路径 /home/user/app/mysyte/static/
中的静态文件夹。 /var/log/nginx/error.log
同样的错误 open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)
要解决此问题,请查看此 page 问题 2