88 votes

Nginx sert un fichier statique et obtient 403 forbidden.

Je veux juste aider quelqu'un. Oui, vous voulez juste servir un fichier statique en utilisant nginx, et vous avez tout ce qu'il faut dans nginx.conf :

location /static {
       autoindex on;
       #root /root/downloads/boxes/;
       alias /root/downloads/boxes/;
      }

Mais, à la fin, vous avez échoué. Vous avez obtenu "403 forbidden" du navigateur...

---------------------------------------- La réponse ci-dessous : ----------------------------------------

La solution est très simple :


Méthode 1 : Exécuter nginx en tant qu'utilisateur propriétaire de '/Root/downloads/boxes/'.

Sur nginx.conf :

user  nobody;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;

OUI, dans la première ligne " utilisateur noboy ; " il suffit de supprimer " # " et changer " personne " à votre propre nom d'utilisateur sous Linux/OS X, c'est-à-dire changer en " Racine " pour le test. Le redémarrage de nginx.

Attention Tu ferais mieux de ne pas courir. nginx comme Racine ! Ici juste pour tester, c'est dangereux pour le Hacker.

Pour plus de références, voir nginx (moteur X) - Quelle douleur dans le BUM ! [13 : Permission refusée]


Voie 2 : Changez le propriétaire de '/Root/downloads/boxes/' en 'www-data' ou 'nobody'.

Sur Terminal :

ps aux | grep nginx

Obtenez le nom d'utilisateur de nginx en cours d'exécution. Il doit être www-data ou "personne déterminée par la version de nginx. Ensuite, tapez dans le Terminal(utilisez www-data par exemple) :

chown -R www-data:www-data /root/downloads/boxes/

------------------------------ Une chose plus importante est : ------------------------------

Ces répertoires parents "/" , "/Root" , "/Root/downloads" doit donner à l'execute(x) la permission de www-data ou "personne . c'est-à-dire

ls -al /root
chmod o+x /root
chmod o+x /root/downloads

Pour plus de références, voir Résolution de l'erreur "403 Forbidden" (interdit) y Nginx 403 interdit pour tous les fichiers

7voto

Jason Points 6

J'ai rencontré ce problème avec un projet Django. La modification des autorisations d'utilisateur et des groupes n'a pas fonctionné. Cependant, le déplacement de l'ensemble du dossier statique de mon projet vers /var/www a fonctionné.

Copiez les fichiers statiques de votre projet dans /var/www/static

# cp -r /project/static /var/www/static

Diriger nginx vers le bon répertoire

# sudo nano /etc/nginx/sites-available/default

server {
        listen 80 default_server;
        listen [::]:80 default_server;

        server_name _;

        location /static/ {
                root /var/www;
        }

        location / {
                include proxy_params;
                proxy_pass http://unix:/run/gunicorn.sock;
        }

}

Tester la configuration de nginx et recharger

# sudo nginx -t
# sudo systemctl reload nginx

4voto

La configuration de l'utilisateur Root dans nginx peut être vraiment dangereuse. Le fait de devoir définir des autorisations pour toute la hiérarchie des fichiers peut s'avérer fastidieux (imaginez que le chemin complet du dossier se trouve dans plus de 10 sous-dossiers).

Ce que je ferais, c'est de mettre en miroir le dossier que vous voulez partager, sous /usr/share/nginx/nom_du_dossier avec des permissions pour l'utilisateur configuré de nginx (généralement www-data). Vous pouvez le faire avec bindfs.

Dans votre cas, je le ferais :

sudo bindfs -u www-data -g www-data /root/downloads/boxes/ /usr/share/nginx/root_boxes

Il va monter /Root/downloads/boxes dans /usr/share/nginx/root_boxes avec toutes les permissions pour l'utilisateur www-data. Maintenant, vous définissez ce chemin dans la configuration de votre bloc d'emplacement

location /static {
   autoindex on;
   alias /usr/share/nginx/root_boxes/;
  }

3voto

Jeremy Points 772

Essayez la réponse acceptée par @gitaarik, et si cela donne toujours 403 Forbidden ou 404 Not Found et votre cible de localisation est / lire la suite.

J'ai également rencontré ce problème, mais aucun des changements de permission mentionnés ci-dessus n'a résolu mon problème. Il a été résolu en ajoutant l'option root car je définissais l'emplacement de la racine ( / ) et a accidentellement utilisé le alias alors que j'aurais dû utiliser la directive root directive.

La configuration est acceptée, mais donne 403 Forbidden o 404 Not Found si l'auto-indexation est activée pour / :

location / {
  alias /my/path/;
  index index.html;
}

Définition correcte :

location / {
  root /my/path/;
  index index.html;
}

0voto

EPS Points 1

Je me cogne la tête sur ce problème des 403 pendant un certain temps. J'utilise CentOS depuis DigitalOcean.

Je pensais que pour résoudre le problème, il suffisait de définir SELINUX=disabled dans /etc/selinux/config mais j'avais tort. D'une manière ou d'une autre, j'ai bousillé mon droplet.

Cela fonctionne pour moi ! sudo chown nginx:nginx /var/www/mydir

0voto

lingceng Points 1720

Mon nginx est exécuté avec l'utilisateur nginx et le groupe nginx, mais j'ai ajouté le groupe nginx à la liste des utilisateurs. dossier public ne fonctionne pas pour moi.

Je vérifie la permission en tant qu'utilisateur de nginx.

su nginx -s /bin/bash

J'ai trouvé que je dois ajouter le groupe pour le chemin complet. Mon chemin commence à /Root, donc je dois faire ce qui suit :

chown -R :nginx /root

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X