Como resolver 404 para arquivos estáticos com Django e Nginx?

3

Eu configurei uma VM Trusty com Django + Nginx ( outros animais também.

O servidor está funcionando, eu recebo a página "Bem-vindo ao Django" . Mas quando eu entro em servername/admin carrega a página HTML mas não carrega o conteúdo estático.

E a página de administração tem esses links para conteúdo estático:

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css" />

Ambos os arquivos CSS me dão 404, como mostra o log do Nginx:

192.168.56.1 - - [05/Jun/2014:12:04:09 -0300] "GET /admin HTTP/1.1" 301 5 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:09 -0300] "GET /admin/ HTTP/1.1" 200 833 "-" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:10 -0300] "GET /static/admin/css/base.css HTTP/1.1" 404 142 "http://ubuntu-server/admin/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"
192.168.56.1 - - [05/Jun/2014:12:04:10 -0300] "GET /static/admin/css/login.css HTTP/1.1" 404 142 "http://ubuntu-server/admin/" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:29.0) Gecko/20100101 Firefox/29.0"

Acho que o erro está no meu arquivo nginx.conf , mas não tenho ideia de como resolvê-lo. Esta é a árvore do site:

Arquivos principais: urls.py , settings.py .

    
por Lucio 05.06.2014 / 17:13

3 respostas

5

Este é provavelmente um problema de configuração no django ou Nginx

Há duas coisas que você quer verificar:

  1. Seus arquivos estáticos estão configurados corretamente em settings.py? Para a página básica do Django, estas configurações não são necessárias, mas para seus arquivos estáticos, você precisa configurar arquivos estáticos. Isso não é necessário para uso em produção, porque lá o servidor da Web serve os arquivos estáticos. Eles são coletados? Uma vez configurado, você pode ter que executar python manage.py collectstatic .

    Por exemplo,

    #settings.py
    INSTALLED_APPS += [django.contrib.staticfiles,]
    STATIC_URL = '/static/'
    STATIC_ROOT = '/your_path/.../static/'
    
    # This collects all files in /static/ directories and puts them in the static ROOT folder.
    python manage.py collectstatic
    
  2. O Django não serve arquivos estáticos por si só, assim você terá que adicionar uma configuração no motor x para que ele sirva os arquivos estáticos. Você pode ter que reiniciar o nginx e / ou adicionar autoindex on; à sua configuração para / static / no nginx.conf.

Veja Implantando arquivos estáticos .

Em desenvolvimento, você também pode adicionar o /static/ url ao seu urls.py (em desenvolvimento) e não apenas as configurações.

    
por don.joey 12.06.2014 / 13:45
3

Eu encontrei o mesmo problema e uma pequena alteração na configuração do nginx resolveu isso para mim.

Esta foi minha configuração nginx para servir arquivos estáticos:

location /static/ {
    root /home/muqube/muqube_website/muqube/muqube_static_root/;
}

A solução foi substituir root por alias , assim:

location /static/ {
    alias /home/muqube/muqube_website/muqube/muqube_static_root/;
}
    
por Raiyan 17.12.2015 / 03:30
0

Eu estou supondo que você tem os caminhos de arquivo errados. De acordo com o que o servidor está dizendo, as pastas admin e static estão no mesmo caminho.

Também no Linux / é o caminho da raiz. Seus arquivos não estão no diretório raiz.

Novamente, estou apenas supondo, espero que isso ajude!

    
por Sam-Graham 11.06.2014 / 05:14