nginx não está servindo arquivos estáticos de administração?

3

Esclarecimento : O seguinte erro é somente para os admin arquivos estáticos , isto é, é específico para os arquivos estáticos correspondentes ao Django admin. O restante dos arquivos estáticos está funcionando perfeitamente.

Problema

Basicamente, não consigo acessar os admin arquivos estáticos usando o servidor ngix.

Funciona com o micro servidor do Django, e o collectstatic está fazendo o seu trabalho, o que significa colocar os arquivos no lugar esperado na pasta estática.

Os URLs estão corretos, mas não consigo acessar os arquivos estáticos de administração diretamente, mas os outros podem. Então, por exemplo:

  1. Eu posso acessar esse URL (copiando-o no navegador): myserver.com:8080/static/css/base/base.css

  2. mas não consigo acessar esse outro URL (copiando-o no navegador): myserver.com:8080/static/admin/css/admin.css

O que eu tentei?

funciona se eu copiar a estrutura de diretórios admin/ em __other_admin_directory_name/__ e, em seguida, eu acessar myserver.com:8080/static/__other_admin_directory_name__/css/admin.css

Além disso,

  1. Eu verifiquei as permissões e está tudo bem.
  2. Tentei alterar ADMIN_MEDIA_PREFIX = '/ static / admin /' para ADMIN_MEDIA_PREFIX = '/ static / other_admin_directory_name /', não funciona.

Finalmente, e parece ser uma pista importante:

Eu tentei copiar a estrutura de diretórios admin/ para __admin_and_then_any_suffix/__ . Então não consigo acessar %código%. Portanto, se o nome do diretório começar com myserver.com:8080/static/__admin_and_then_any_suffix/__/css/admin.css (por exemplo, administração ou admin ), então ele não funcionará .

EDIT - adicionado graças à observação @sarnold:

O problema parece estar no arquivo de configuração do nginx / etc / nginx / sites-available / mysite

location /static/admin {
   alias /home/vl3/.virtualenvs/vl3/lib/python2.7/site-packages/django/contrib/admin/media/;
}
    
por toto_tico 28.06.2012 / 01:13

2 respostas

17

Minhas sugestões:

  1. Use o django 1.3+ (e ADMIN_MEDIA_PREFIX está obsoleto agora )

  2. Defina os dois STATIC_URL e STATIC_ROOT em seu settings.py

  3. Defina apenas uma única entrada estática em seu conf nginx (com barras à direita). Não é necessário para um segundo que aborde static/admin/ :

    location /static/  {
            alias /path/to/static/;
    }
    
  4. Use collectstatic , que deve coletar admin - > estático / admin. Ele viverá no mesmo local que todo o restante da mídia estática coletada.

    python manage.py collectstatic

por 28.06.2012 / 02:29
1

Eu tenho o mesmo problema. Meu servidor nginx no Centos 7.6 não pode acessar a pasta estática no caminho /home/user/app/mysyte/static/ . Em /var/log/nginx/error.log mesmo erro

open() "/home/user/app/mysyte/static/*.css" failed (13: Permission denied)

Para resolver e entender esse problema :=*

  1. execute o comando getenforce
  2. se for aplicado - cat /var/log/audit/audit.log | grep nginx

para mim string com errrors parece

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)

copie o id da auditoria msg 1558033633.723:201

  1. execute o comando grep yours_audit_id /var/log/audit/audit.log | audit2why

saída para mim

[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

Então, como você pode ver, responda aqui setsebool -P httpd_read_user_content 1 quando você executa este comando você vê seu conteúdo estático

    
por 16.05.2019 / 21:26

Tags