Nginx lance un 403 Interdit sur les fichiers statiques

J’ai une application Django, Python 2.7 avec Gunicorn et Nginx.

Nginx lance une 403 Forbidden Error si j’essaie d’afficher quelque chose dans mon dossier static @:

 /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static 

nginx config ( /etc/nginx/sites-enabled/myapp ) contient:

 server { listen 80; server_name *.myapp.com; access_log /home/ubuntu/virtualenv/myapp/error/access.log; error_log /home/ubuntu/virtualenv/myapp/error/error.log warn; connection_pool_size 2048; fastcgi_buffer_size 4K; fastcgi_buffers 64 4k; root /home/ubuntu/virtualenv/myapp/myapp/homelaunch/; location /static/ { alias /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/; } location / { proxy_pass http://127.0.0.1:8001; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"'; } } 

error.log contient:

 2013/11/24 23:00:16 [error] 18243#0: *277 open() "/home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png" failed (13: Permission denied), client: xx.xx.xxx.xxx, server: *.myapp.com, request: "GET /static/img/templated/home/img2.png HTTP/1.1", host: "myapp.com", referrer: "http://myapp.com/" 

access.log contient

 xx.xx.xx.xxx - - [24/Nov/2013:23:02:02 +0000] "GET /static/img/templated/base/animg.png HTTP/1.1" 403 141 "http://myapp.com/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.8; rv:25.0) Gecko/20100101 Firefox/25.0" xx.xx.xx.xxx - - [24/Nov/2013:23:02:07 +0000] "-" 400 0 "-" "-" 

J’ai juste essayé de visualiser un fichier .css dans /static/ et cela génère une erreur comme celle-ci dans la source:

  403 Forbidden  

403 Forbidden


nginx/1.1.19

Il semble que l’utilisateur nginx s’exécute car ( nginx ?) /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png les privilèges pour lire le fichier local /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/img/templated/home/img.png . Vous voulez probablement vérifier les permissions de fichiers ainsi que les permissions sur les répertoires de la hiérarchie.

MacOs El Capitan : En haut de nginx.conf écrivez user username group_name

Mon nom d’utilisateur est Kamil, donc j’écris:

 user Kamil staff; 

(le mot «staff» est très important dans macOS). Cela fait l’affaire. Après cela, vous n’avez pas besoin de modifier les permissions dans le dossier et les fichiers de votre projet.

Essayez de spécifier un utilisateur en haut de votre nginx.conf, au-dessus de la section serveur.

 user www-data; 

Le correctif minimum qui a fonctionné pour moi est:

 sudo chmod -R 664 /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/ sudo chmod -R a+X /home/ubuntu/virtualenv/myapp/myapp/homelaunch/static/ 

(BTW, dans mon cas, le dossier statique s’appelle collected_static )

Il semble que l’utilisateur du serveur Web ne dispose pas des permissions de lecture sur les fichiers statiques. Vous pouvez résoudre ce problème de deux manières:

  1. (plus simple, plus sûr) lancez nginx comme utilisateur d’application au lieu de nginx par défaut. Pour ce faire, ajoutez ce qui suit dans

nginx.conf

 user your_app_user 

Remplacez your_app_user par le nom d’utilisateur unix approprié pour votre application.

Dans ce cas, your_app_user a déjà les permissions nécessaires sur le contenu statique.

  1. Une autre méthode consisterait à accorder des permissions pour l’utilisateur du serveur Web au répertoire statique.

Après des heures et des heures à la suite de tant d’articles, je suis tombé sur: http://nicholasorr.com/blog/2008/07/22/nginx-engine-x-what-a-pain-in-the-bum/

qui avait un commentaire pour chmoder tout le répertoire de l’application django, donc j’ai fait:

 sudo chmod -R myapp 

Cela a corrigé Incroyable!

Merci à ceux qui ont proposé des solutions pour résoudre ce problème.