Autorisation Nginx refusée 13 avec Django sur le contenu statique

J’ai utilisé ce tutoriel pour configurer un virtualenv et le serveur nginx. J’ai fait exactement ce qui a été dit, mais j’ai toujours un

Autorisation refusée (13)

erreur lors de la tentative d’access au contenu statique. J’ai déjà défini mon répertoire statique et l’ensemble du projet Django comme appartenant à www-data .

Plus loin, si j’ignore le contenu statique et que j’essaie de tout laisser à l’empereur, je rencontre plus d’erreurs de refus. Maintenant, chaque fois que j’essaie d’accéder au site.

 root 8704 0.0 0.0 62780 1260 ? Ss 16:19 0:00 nginx: master process /usr/sbin/nginx www-data 8705 0.0 0.0 63108 1680 ? S 16:19 0:00 nginx: worker process www-data 8706 0.0 0.0 63108 1680 ? S 16:19 0:00 nginx: worker process www-data 8707 0.0 0.0 63108 1680 ? S 16:19 0:00 nginx: worker process www-data 8708 0.0 0.0 63448 2276 ? S 16:19 0:00 nginx: worker process 

Lors du démarrage de uwsgi: https://gist.github.com/anonymous/f19997fd07c0237a7435 en tant que root Lors du démarrage de uwsgi avec www-data:

 root@vmd2719:~/energy1/energydrinks# uwsgi --ini django.ini --uid www-data --gid www-data [uWSGI] getting INI configuration from django.ini open("./python27_plugin.so"): No such file or directory [core/utils.c line 3321] !!! UNABLE to load uWSGI plugin: ./python27_plugin.so: cannot open shared object file: No such file or directory !!! *** Starting uWSGI 1.9.6 (64bit) on [Mon Apr 15 16:24:49 2013] *** comstackd with version: 4.6.3 on 15 April 2013 11:52:36 os: Linux-3.2.0-40-generic #64-Ubuntu SMP Mon Mar 25 21:22:10 UTC 2013 nodename: vmd2719 machine: x86_64 clock source: unix detected number of CPU cores: 1 current working directory: /root/energy1/energydrinks writing pidfile to /tmp/energy-master.pid detected binary path: /usr/local/bin/uwsgi setgid() to 33 setuid() to 33 chdir(): Permission denied [core/uwsgi.c line 2063] chdir(): Permission denied [core/uwsgi.c line 1249] chdir(): Permission denied [core/uwsgi.c line 1269] 

Journal de débogage Nginx sur l’access à un fichier statique:

 2013/04/15 16:20:25 [debug] 8708#0: *1 http filename: "/root/energy1/energydrinks/static/jgrowl/jquery.jgrowl.js" 2013/04/15 16:20:25 [debug] 8708#0: *1 add cleanup: 0000000001F68C10 2013/04/15 16:20:25 [error] 8708#0: *1 open() "/root/energy1/energydrinks/static/jgrowl/jquery.jgrowl.js" failed (13: Permission denied), client: 109.193.75.142, server: .de, request: "GET /static/jgrowl/jquery.jgrowl.js HTTP/1.1", host: ".de:8000", referrer: "http://.de:8000/member/register/" 2013/04/15 16:20:25 [debug] 8708#0: *1 http finalize request: 403, "/static/jgrowl/jquery.jgrowl.js?" a:1, c:1 2013/04/15 16:20:25 [debug] 8708#0: *1 http special response: 403, "/static/jgrowl/jquery.jgrowl.js?" 2013/04/15 16:20:25 [debug] 8708#0: *1 http set discard body 2013/04/15 16:20:25 [debug] 8708#0: *1 xslt filter header 2013/04/15 16:20:25 [debug] 8708#0: *1 charset: "" > "utf-8" 2013/04/15 16:20:25 [debug] 8708#0: *1 HTTP/1.1 403 Forbidden 

Donc, votre nginx s’exécute en tant que www-data dans /root … Cela ne peut pas être bon. /root n’est pas accessible par les utilisateurs normaux (sauf si vous chmod +x it, ce qui est une mauvaise idée).

Vous devez déplacer vos données en dehors, dans /srv/http , /var/www ou /home/whatever , mais pas dans /root .

Si votre nginx n’est pas en production, pouvez-vous append “error_log / path / to / log debug”; puis essayez d’accéder à l’un de vos contenus statiques. Vous verrez ce que nginx essaie de charger dans le fichier de débogage. Cela devrait être utile.

N’hésitez pas à poster son contenu ici pour nous aider à comprendre.