web-dev-qa-db-fra.com

Comment résoudre 404 pour les fichiers statiques avec Django et Nginx?

J'ai configuré un fichier Trusty VM avec Django + Nginx ( autres éléments ).

Le serveur fonctionne, je reçois la page "Bienvenue à Django" . Mais quand j'entre pour servername/admin il charge la page HTML mais ne parvient pas à charger le contenu statique.

Et la page admin ont ce lien vers du contenu statique:

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

Les deux fichiers CSS me donnent 404, comme le montre le journal 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"

Je pense que l'erreur est sur mon fichier nginx.conf , mais je ne sais pas comment le résoudre. Ceci est l'arborescence du site:

screenshoot

Fichiers principaux: urls.py , settings.py .

4
Lucio

C’est probablement un problème de configuration dans Django ou Nginx

Il y a deux choses que vous voulez vérifier:

  1. Vos staticfiles sont-ils configurés correctement dans settings.py? Pour la page de base Django, ces paramètres ne sont pas nécessaires, mais pour vos fichiers statiques, vous devez configurer des fichiers statiques. Cela n'est pas nécessaire pour une utilisation en production, car le serveur Web sert les fichiers statiques. Sont-ils collectés? Une fois configuré, vous devrez peut-être exécuter python manage.py collectstatic.

    Par exemple,

    #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. Django ne sert pas les fichiers statiques par lui-même (à moins que vous ayez défini DEBUG=True dans settings.py), vous devrez donc ajouter une configuration dans le moteur x pour lui faire servir les fichiers statiques. Vous devrez peut-être redémarrer nginx et/ou ajouter autoindex on; à votre configuration pour/static/in nginx.conf.

Voir Déploiement de fichiers statiques .

En développement, vous devrez peut-être également ajouter l'URL /static/ à votre urls.py (en développement) et pas seulement les paramètres.

6
don.joey

J'ai rencontré le même problème et un léger changement dans la configuration de nginx l'a résolu pour moi.

C'était ma configuration de nginx pour servir des fichiers statiques:

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

La solution consistait à remplacer root par alias, comme suit:

location /static/ {
    alias /home/muqube/muqube_website/muqube/muqube_static_root/;
}
3
Raiyan

Je suppose que vous avez les mauvais chemins de fichiers. Selon ce que dit le serveur, les dossiers admin et static se trouvent dans le même chemin.

Aussi sur Linux/est le chemin racine. Vos fichiers ne sont pas dans le répertoire racine.

Encore une fois, je ne fais que deviner, espérons que cela aide!

0
Sam-Graham