Серверная ошибка Django 403 запрещена nginx / 1.10.3 (Ubuntu) - PullRequest
0 голосов
/ 15 мая 2018

У меня есть медиаконтент на сервере Ubuntu. Я могу загружать файлы. но когда я пытаюсь загрузить файлы, он показывает 403 запрещенных nginx / 1.10.3 (ubuntu) . В разрешении файла отображается rw -------- .

Как я могу получить весь контент без ошибок? Я не знаком с Ubuntu

Я использовал этот фрагмент для восстановления файлов. Тем не менее, это работает только один раз. Через некоторое время выдает ту же ошибку.

sudo chmod -R 664 /home/django/media/image/
sudo chmod -R a+X /home/django/media/image/

1 Ответ

0 голосов
/ 15 мая 2018

Пользователь nginx должен иметь возможность читать эти файлы. Вы можете использовать групповые разрешения, чтобы разрешить это. Также у пользователя wsgi должен быть установлен umask , чтобы создаваемые им файлы были доступны для чтения и для группы.

В вашем случае, похоже, ваш пользователь wsgi имеет umask 077, что делает файлы, которые он создает, только для чтения владельцем (rw--------). Таким образом, nginx не имеет разрешения на чтение. Вместо этого используйте umask 027, который позволит групповым пользователям получать доступ к этим файлам, но не записывать в них (у nginx нет оснований для доступа к записи).

Например, если вы используете gunicorn в качестве сервера wsgi, вы можете использовать флаги gunicorn --group www --umask 027. Убедитесь, что и gunicorn, и пользователь nginx входят в группу www.

Исправить разрешение примерно так.

# set group to `www` for all files recursively
sudo chgrp www -R /home/django/media/
# set all files to be read/write by owner and readable by group `www`
find /home/django/media/ -type f -exec chmod 640 {} ; 
# same with directories +execute
find /home/django/media/ -type d -exec chmod 750 {} ; 

В качестве альтернативы используйте 644 для файлов и 755 для каталогов и 022 для umask. Тогда групповые разрешения не имеют значения, поскольку все пользователи получают права на чтение.

Последний вариант не является лучшей практикой безопасности, но, вероятно, он подойдет, если только вы предоставляете пользователю django право на запись.

...