Подтвердить что ты не робот

Nginx бросает 403 Запрещено на статические файлы

У меня есть приложение django, python 2.7 с gunicorn и nginx.

Nginx бросает 403 Forbidden Error, если я пытаюсь просмотреть что-либо в моей папке static @:

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

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"';
        }
    }

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

Я попробовал просто посмотреть файл .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>
4b9b3361

Ответ 1

Кажется, пользователь nginx работает, поскольку (nginx?) отсутствует привилегия для чтения локального файла /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png. Вероятно, вы захотите проверить права доступа к файлам, а также разрешения на каталоги в иерархии.

Ответ 2

MacOS El Capitan. Наверху nginx.conf напишите user username group_name

Мое имя пользователя - Kamil, поэтому я пишу:

user Kamil staff;

(слово "staff" очень важно в macOS). Это делает трюк. После этого вам не нужно изменять какие-либо разрешения в папке и файлах проекта.

Ответ 3

Попробуйте указать пользователя в верхней части вашего nginx.conf над секцией сервера.

user www-data;

Ответ 4

Минимальное исправление, которое сработало для меня:

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)

Ответ 5

Кажется, пользователь веб-сервера не имеет прав на чтение статических файлов. Вы можете решить это двумя способами:

  1. (проще и безопаснее) запускайте nginx как пользователь приложения вместо пользователя nginx по умолчанию. Для этого добавьте следующее в nginx.conf

    user your_app_user
    

    Замените your_app_user на соответствующее имя пользователя unix для вашего приложения. В этом случае your_app_user уже имеет необходимые разрешения на статический контент.

  2. Другой способ - предоставить пользователю веб-сервера разрешения для статического каталога.

Ответ 6

После нескольких часов после нескольких статей, я столкнулся: http://nicholasorr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/

у которого был комментарий к chmod для всего django app dir, поэтому я сделал:

sudo chmod -R myapp

Это исправлено. Невероятно!

Спасибо тем, кто предложил решения, чтобы исправить это.