Nginx在静态文件上抛出了403 Forbidden

Cod*_*alk 18 python django configuration nginx

我有一个django app,python 2.7 with gunicorn和nginx.

403 Forbidden Error如果我尝试在我的static文件夹@中查看任何内容,Nginx会抛出一个:

/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static
Run Code Online (Sandbox Code Playgroud)

nginx config(/etc/nginx/sites-enabled/myapp)包含:

server {
        listen       80;
        server_name     *.myapp.com;
        access_log /home/ubuntu/virtualenv/myapp/error/access.log;
        error_log /home/ubuntu/virtualenv/myapp/error/error.log warn;
        connection_pool_size 2048;

        fastcgi_buffer_size 4K;
        fastcgi_buffers 64 4k;

        root /home/ubuntu/virtualenv/myapp/myapp/homelaunch/;

        location /static/ {
            alias /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/;
        }

        location / {
            proxy_pass http://127.0.0.1:8001;
            proxy_set_header Host $host;
            proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
            add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
        }
    }
Run Code Online (Sandbox Code Playgroud)

error.log包含:

2013/11/24 23:00:16 [error] 18243#0: *277 open() "/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png" failed (13: Permission denied), client: xx.xx.xxx.xxx, server: *.myapp.com, request: "GET /static/img/templated/home/img2.png HTTP/1.1", host: "myapp.com", referrer: "http://myapp.com/"
Run Code Online (Sandbox Code Playgroud)

access.log包含

xx.xx.xx.xxx - - [24/Nov/2013:23:02:02 +0000] "GET /static/img/templated/base/animg.png HTTP/1.1" 403 141 "http://myapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0"
xx.xx.xx.xxx - - [24/Nov/2013:23:02:07 +0000] "-" 400 0 "-" "-"
Run Code Online (Sandbox Code Playgroud)

我尝试只是查看说出一个.css文件/static/,它会在源代码中抛出这样的错误:

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
Run Code Online (Sandbox Code Playgroud)

bry*_*ryn 23

用户nginx似乎正在运行,因为(nginx?)缺少读取本地文件的权限/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png.您可能想要检查文件权限以及层次结构中目录的权限.

  • 因此,用户可能缺少统计/列出层次结构中的一个或多个目录的权限.这可能是使用组成员资格最好的解决方案,但是如果你在每个目录(home,ubuntu,virtualenv等)上"chmod a + x",我猜它会起作用.目录上的可执行位控制是否允许用户列出内容. (3认同)
  • 我试着做 sudo chmod 777 -R static (只是为了看看它是否有任何区别,它没有 (2认同)

Kam*_*ski 22

MacOs El Capitan:nginx.conf写作的顶部user username group_name

我的用户名是Kamil所以我写道:

user Kamil staff;
Run Code Online (Sandbox Code Playgroud)

("员工"这个词在macOS中非常重要).这样就可以了.之后,您无需更改项目文件夹和文件中的任何权限.


San*_*dar 12

在这种情况下,最好的解决方案是将 www-data 添加到用户名组中:

gpasswd -a www-data username

要使更改生效,请重新启动 nginx

nginx -s reload

  • 刚刚解决了我的问题✅✅✅ (2认同)

eez*_*zis 8

尝试在服务器部分上方的nginx.conf顶部指定用户.

user www-data;
Run Code Online (Sandbox Code Playgroud)

  • 如果我这样做,然后重新启动 nginx,它会说 - /etc/nginx/sites-enabled/myapp:1 中的未知指令“user” (2认同)

o_c*_*o_c 5

对我有用的最低修复是:

sudo chmod -R 664 /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/
sudo chmod -R a+X /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/
Run Code Online (Sandbox Code Playgroud)

(顺便说一句,在我的情况下,静态文件夹称为collected_static


小智 5

Web 服务器用户似乎没有静态文件的读取权限。您可以通过两种方式解决此问题:

  1. (最简单,更安全)以您的应用程序用户而不是默认nginx用户身份运行 nginx 。为此,请在nginx.conf 中添加以下内容

    user your_app_user
    
    Run Code Online (Sandbox Code Playgroud)

    替换your_app_user为您的应用程序的适当 unix 用户名。在这种情况下,your_app_user已经拥有对静态内容的必要权限。

  2. 另一种方法是将 Web 服务器用户的权限授予静态目录。