nginx не обслуживает статические файлы администратора?
Пояснение: Следующая ошибка относится только к статическим файлам администратора, то есть относится только к статическим файлам, соответствующим администратору Django. Остальные статические файлы работают отлично.
проблема
По сути, я не могу получить доступ к статическим файлам администратора с помощью сервера ngix.
Он работает с микро-сервером Django, и collectstatic
выполняет свою работу, то есть помещает файлы в ожидаемое место в статической папке.
URL-адреса верны, но я не могу получить доступ к статическим файлам администратора напрямую, но остальные я могу. Так, например:
Я могу получить доступ к этому URL (копируя его в браузере):
myserver.com:8080/static/css/base/base.css
но я не могу получить доступ к этому другому URL (копируя его в браузере):
myserver.com:8080/static/admin/css/admin.css
Что я пробовал?
Это работает, если я копирую admin/
структура каталогов в __other_admin_directory_name/__
и тогда я получаю доступ myserver.com:8080/static/__other_admin_directory_name__/css/admin.css
Более того,
- Я проверил разрешения и все в порядке.
- Я попытался изменить ADMIN_MEDIA_PREFIX = '/static/admin/' на ADMIN_MEDIA_PREFIX = '/ static / other_admin_directory_name /', это не работает.
Наконец, и это, кажется, важная подсказка:
Я пытался скопировать admin/
структура каталогов в __admin_and_then_any_suffix/__
, Тогда я не могу получить доступ myserver.com:8080/static/__admin_and_then_any_suffix/__/css/admin.css
, Итак, если имя каталога начинается с admin
(например, администрация или admin2
) тогда это не работает.
РЕДАКТИРОВАТЬ - добавлено благодаря наблюдению @sarnold:
Кажется, проблема в файле конфигурации nginx/ etc / nginx/ sites-available / mysite
location /static/admin {
alias /home/vl3/.virtualenvs/vl3/lib/python2.7/site-packages/django/contrib/admin/media/;
}
2 ответа
Мои предложения:
Используйте django 1.3+ (а ADMIN_MEDIA_PREFIX устарела)
Установите оба
STATIC_URL
а такжеSTATIC_ROOT
в твоих settings.pyОпределите только одну статическую запись в вашей конфигурации nginx (с завершающими косыми чертами). Нет необходимости во втором, который обращается
static/admin/
:location /static/ { alias /path/to/static/; }
использование
collectstatic
который должен собрать admin -> static/admin. Он будет жить в том же месте, что и все остальные ваши собранные статические носители.python manage.py collectstatic
У меня та же проблема. Мой сервер nginx на Centos 7.6 не может получить доступ к статической папке в пути /home/user/app/mysyte/static/
, В /var/log/nginx/error.log
та же ошибка
open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)
Для решения и понимания этой проблемы :=*
- Команда запуска
getenforce
- если соблюдение -
cat /var/log/audit/audit.log | grep nginx
для меня строка с ошибками выглядит так
type=AVC msg=audit(1558033633.723:201): avc: denied { read } for pid=7758 comm="nginx" name="responsive.css" dev="dm-0" ino=17312394 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
type=SYSCALL msg=audit(1558033633.723:201): arch=c000003e syscall=2 success=no exit=-13 a0=564f710dd55d a1=800 a2=0 a3=68632f656d6f682f items=0 ppid=7757 pid=7758 auid=4294967295 uid=998 gid=996 euid=998 suid=998 fsuid=998 egid=996 sgid=996 fsgid=996 tty=(none) ses=4294967295 comm="nginx" exe="/usr/sbin/nginx" subj=system_u:system_r:httpd_t:s0 key=(null)
скопировать идентификатор аудита MSG 1558033633.723:201
- Команда запуска
grep yours_audit_id /var/log/audit/audit.log | audit2why
выход для меня
[root@uwsgi ~]# grep 1558034479.384:221 /var/log/audit/audit.log | audit2why
type=AVC msg=audit(1558034479.384:221): avc: denied { read } for pid=7758 comm="nginx" name="responsive.css" dev="dm-0" ino=17312394 scontext=system_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:user_home_t:s0 tclass=file permissive=0
Was caused by:
The boolean httpd_read_user_content was set incorrectly.
Description:
Allow httpd to read user content
Allow access by executing:
# setsebool -P httpd_read_user_content 1
Так что, как вы можете видеть ответ здесь setsebool -P httpd_read_user_content 1
когда вы запускаете эту команду, вы видите свой статический контент