web-dev-qa-db-fra.com

Nginx lance un 403 interdit sur les fichiers statiques

J'ai une application Django, python 2.7 avec gunicorn et nginx.

Nginx lance un 403 Forbidden Error, si j'essaie de visualiser quoi que ce soit 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é d'afficher un fichier .css dans /static/ et une erreur comme celle-ci est générée:

<html>
<head><title>403 Forbidden</title></head>
<body bgcolor="white">
<center><h1>403 Forbidden</h1></center>
<hr><center>nginx/1.1.19</center>
</body>
</html>
16
CodeTalk

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

24
bryn

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

Mon nom d'utilisateur est Kamil alors j'écris:

user Kamil staff;

(Le mot "personnel" est très important dans macOS). Cela fait l'affaire. Après cela, vous ne devez modifier aucune autorisation dans le dossier et les fichiers de votre projet.

19
Kamil Kiełczewski

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

user www-data;
8
eezis

La solution minimale qui a fonctionné pour moi est la suivante:

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)

3
o_c

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

  1. (plus facile, plus sûr) exécutez nginx en tant qu’utilisateur app au lieu de l'utilisateur par défaut nginx . 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, votre_app_user a déjà les autorisations nécessaires sur le contenu statique.

  1. Une autre solution consiste à accorder des autorisations pour l'utilisateur du serveur Web au répertoire statique.
1
user4212639