python Nginx在静态文件上抛出403禁止

r7knjye2  于 2022-12-02  发布在  Python
关注(0)|答案(9)|浏览(192)

我有一个Django应用程序,python 2.7,带有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"';
        }
    }

错误.日志包含:

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

访问日志包含

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

tuwxkamq1#

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

xriantvc

xriantvc2#

马可·埃尔·卡皮坦:在nginx.conf的顶部写入user username group_name

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

user Kamil staff;

(word'staff'在macOS中非常重要)。这样就可以了。之后您就不需要更改项目文件夹和文件中的任何权限。

zpgglvta

zpgglvta3#

对我有效的最低修复是:

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

(BTW,在我的例子中,静态文件夹称为collected_static

ulydmbyx

ulydmbyx4#

Web服务器用户似乎没有读取静态文件的权限。您可以通过以下两种方法解决此问题:
1.(最简单,更安全)以你的app用户而不是默认的nginx用户的身份运行nginx。

user your_app_user

your_app_user替换为您的应用程序的相应unix用户名。在这种情况下,your_app_user已经具有访问静态内容的必要权限。
1.另一种方法是为Web服务器用户授予对静态目录的权限。

gcmastyq

gcmastyq5#

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

user www-data;
jhkqcmku

jhkqcmku6#

在这种情况下,最好的解决方案是将www-data添加到用户名组:
gpasswd -a www-data username
要使更改生效,请重新启动nginx
nginx -s reload

ia2d9nvy

ia2d9nvy7#

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

  • 我使用数字海洋在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
  • 我按照how to deploy your site on 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

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

mwecs4sa

mwecs4sa8#

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

1.运行此程序-〉gpasswd -a www-data your_proj_username
1.重新加载nginx -〉nginx -s reload
1.检查目录的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.重新加载项目服务器。这将解决所有权限错误

up9lanfz

up9lanfz9#

经过几个小时的时间后,这么多的文章,我偶然发现:http://nicholasorr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/
这有一个注解chmod整个django应用程序目录,所以我做了:

sudo chmod -R myapp

这个修好了难以置信!
感谢那些提供解决方案来解决这个问题的人。

相关问题