web-dev-qa-db-fra.com

La récupération des fichiers statiques a échoué avec 404 dans nginx

Je déploie maintenant une application Django avec nginx et gunicorn sur ubuntu 12.

Et je configure le fichier hôte virtuel nginx comme ci-dessous:

server {
    listen 80;
    server_name mydomain.com;
    access_log  /var/log/nginx/gunicorn.log;

    location / {
        proxy_pass http://127.0.0.1:8000;
        proxy_set_header Host $Host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

    location /static/ {
        root /var/www/Django/ecerp/erp/static/;
    }

}

Je peux demander le Django bien, mais quand je demande un fichier statique, il répond avec un état 404.

Je suis sûr que le chemin racine du fichier statique est correct.

Quelqu'un peut-il aider?

24
Alfred Huang

Vous devez utiliser alias au lieu de root. root ajoute les parties d'URL de fin à votre chemin local (par exemple http: //test.ndd/trailing/part , il ajoutera/trailing/part à votre chemin local). Au lieu de cela, alias fait exactement ce que vous voulez: quand http: //test.ndd/static/ est demandé,/static est mappé à votre alias exactement, sans ajouter à nouveau statique .

39
Marc Plano-Lesay

TL; DR - vous devriez vérifier les permissions de vos fichiers

Je suis tombé sur cette question et j'utilisais déjà alias au lieu de root, donc bien que la réponse existante soit à la hauteur, ce qui suit pourrait être utile à d'autres.

Dans mon cas, la solution aux mêmes symptômes s'est avérée être les fichiers dans static/ ayant root comme propriétaire.

Un simple chown www-data:www-data . a résolu le problème, et pas plus 404.

8
Jivan