繁体   English   中英

Nginx 在 Static 文件上抛出 403 禁止访问

[英]Nginx is throwing an 403 Forbidden on Static Files

我有一个 django 应用程序,python 2.7 with gunicorn 和 nginx。

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

/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static

nginx 配置/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"';
        }
    }

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/"

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 "-" "-"

我试着在/static/中查看一个.css文件,它在源代码中抛出了这样的错误:

<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>

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

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

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

user Kamil staff;

(“员工”一词在 macOS 中非常重要)。 这行得通。 之后,您无需更改项目文件夹和文件中的任何权限。

尝试在 nginx.conf 顶部,服务器部分上方指定一个用户。

user www-data;

对我有用的最低修复是:

sudo chmod -R 664 /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/
sudo chmod -R a+X /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/

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

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

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

    user your_app_user

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

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

不久前我遇到了同样的问题。 这可能是多种因素的组合。 我找到了如何通过替换nginx.conf文件中的用户来修复403 access denied

  • 我使用 Digital Ocean 在 ubuntu 服务器上部署了我的网站。
  • 我在新的 ubuntu 服务器上创建了一个新用户并授予管理员权限
    adduser newuser

    usermod -aG sudo newuser 
  • 我更新了我的新服务器并安装了几个软件包
    sudo apt update

    sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl 
  • 我遵循了有关如何在 Digital Ocean 上部署您的网站的所有这些精美说明
  • 由于我更改了用户并使用这个新用户 ssh 进入我的新服务器,因此我需要替换nginx.conf上的用户。 默认nginx.conf用户是www-data
    user www-data;

    worker_processes auto;

    pid /run/nginx.pid;

然后我替换了我的 sudo 用户并解决了我的问题。 😀

    user newuser;

    worker_processes auto;

    pid /run/nginx.pid;
  • 然后我重新启动 nginx、gunicorn 和 postgresql(即使最后一个也不是必需的)
    sudo systemctl restart nginx 

    sudo systemctl restart gunicorn

    sudo systemctl restart postgresql

和多田.. :) 没有更多的问题。

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

gpasswd -a www-data username

为了使您的更改生效,请重新启动 nginx

nginx -s reload

修复 Ubuntu 服务器上 Django static 文件的 403 错误。

  1. 运行这个 -> gpasswd -a www-data your_proj_username

  2. 重新加载 nginx -> nginx -s reload

  3. 检查目录的 chmod: /home/home/proj_dir/home/proj_dir/static

  • 运行此stat --format '%a' /home 结果必须是 755
  • 运行这个 - stat --format '%a' /home/your_proj_dir/static 结果必须是 755
  • 运行这个 - stat --format '%a' /home/your_proj_dir 结果必须是 750
  1. 如果你有不同的值,你可以尝试改变这个:
  • sudo chmod 755 /home
  • sudo chmod 755 /home/your_proj_dir/static
  • sudo chmod 750 /home/your_proj_dir
  1. 重新加载你的项目服务器。 这解决了所有权限错误

经过这么多文章几个小时后,我遇到了: http : //nicholaso​​rr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/

其中对 chmod 整个 django 应用程序目录有评论,所以我做了:

sudo chmod -R myapp

这修复了它。 难以置信!

感谢那些提供解决方案的人。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM