Je veux juste aider quelqu'un. oui, vous voulez juste servir un fichier statique à l'aide de nginx, et vous avez tout compris nginx.conf :
location /static {
autoindex on;
#root /root/downloads/boxes/;
alias /root/downloads/boxes/;
}
Mais finalement, vous avez échoué. Vous avez obtenu "403 interdit" du navigateur ...
---------------------------------------- Le Réponse ci-dessous: -------------------------------------- -
La solution est très simple:
Méthode 1: exécutez nginx en tant qu'utilisateur en tant que propriétaire '/ root/downloads/boxes /'
Dans 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; ", supprimez simplement " # ", et changez" personne "en votre propre nom d'utilisateur sous Linux/OS X, c'est-à-dire changez en" root "pour le test. Le redémarrage nginx.
Attention , vous feriez mieux de ne pas exécuter nginx as racine ! Ici juste pour les tests, c'est dangereux pour le Hacker.
Pour plus de référence, voir nginx (moteur X) - Quelle douleur dans le BUM! [13: Autorisation refusée]
Méthode 2: remplacez '/ root/téléchargements/boxes /' owner par 'www-data' ou 'nobody'
Dans Terminal :
ps aux | grep nginx
Obtenez le nom d'utilisateur de l'exécution de nginx. Il doit être 'www-data' ou 'nobody' déterminé par la version de nginx. Appuyez ensuite sur Terminal (utilisez 'www-data' par exemple):
chown -R www-data:www-data /root/downloads/boxes/
------------------------------ Une autre chose importante est: ------------------------------
Ces répertoires parents "/" , "/ root" , "/ root/Downloads" devrait donner l'autorisation d'exécution (x) à 'www-data' ou 'personne' . c'est à dire.
ls -al /root
chmod o+x /root
chmod o+x /root/downloads
Pour plus de référence, voir Résolution de l'erreur "403 interdite" et Nginx 403 interdit pour tous les fichiers
Vous devez accorder des autorisations nginx pour lire le fichier. Cela signifie que vous devez accorder à l'utilisateur qui exécute les autorisations de processus nginx la lecture du fichier.
Cet utilisateur qui exécute le processus nginx est configurable avec la directive user
dans la configuration nginx, généralement située quelque part en haut de nginx.conf
:
user www-data
http://wiki.nginx.org/CoreModule#user
Le deuxième argument que vous donnez à user
est le groupe, mais si vous ne le spécifiez pas, il utilise le même que l'utilisateur, donc dans mon exemple, l'utilisateur et le groupe sont tous deux www-data
.
Maintenant, les fichiers que vous souhaitez servir avec nginx doivent avoir les autorisations appropriées. Nginx devrait être autorisé à lire les fichiers. Vous pouvez donner au groupe www-data
autorisations de lecture sur un fichier comme celui-ci:
chown :www-data my-file.html
http://linux.die.net/man/1/chown
avec chown
vous pouvez changer l'utilisateur et le propriétaire du groupe d'un fichier. Dans cette commande, je change uniquement le groupe, si vous changez également l'utilisateur, vous devez spécifier le nom d'utilisateur AVANT les deux points, comme chown www-data:www-data my-file.html
. Mais la définition des autorisations de groupe correctes devrait être suffisante pour que nginx puisse lire le fichier.
Étant donné que Nginx gère directement les fichiers statiques, il doit avoir accès aux répertoires appropriés. Nous devons lui donner des autorisations exécutables pour notre répertoire personnel.
La façon la plus sûre de le faire est d'ajouter l'utilisateur Nginx à notre propre groupe d'utilisateurs. Nous pouvons ensuite ajouter l'autorisation exécutable aux propriétaires de groupe de notre répertoire personnel, donnant juste assez d'accès à Nginx pour servir les fichiers:
Sudo usermod -a -G votre_utilisateur nginx
chmod 710/home/votre_utilisateur
pour réponse acceptée
Sudo chown -R :www-data static_folder
pour changer le propriétaire du groupe de tous les fichiers de ce dossier
Après avoir creusé dans des réponses très utiles, j'ai décidé de collecter tout ce qui concerne les autorisations en tant que recette. Plus précisément, la solution la plus simple avec une sécurité maximale (= autorisations minimales).
admin
, c'est-à-dire qu'elle possède le répertoire du site et tout ce qu'il contient. Nous pas voulons exécuter nginx en tant que cet utilisateur (trop de permissions). C'est OK pour les tests, pas pour les prod.nginx
, c'est-à-dire que la configuration contient la ligne user nginx
nginx
fait partie du groupe du même nom: nginx
.nginx
sans changer la propriété du fichier. Cela semble être la plus sûre des options naïves.Afin de servir des fichiers statiques, les autorisations minimales requises dans la hiérarchie des dossiers (voir les autorisations de groupe) doivent être comme ceci (utilisez la commande namei -l /home/admin/WebProject/site/static/hmenu.css
):
racine racine dr-xr-xr-x /
drwxr-xr-x racine racine home
drwxr-x --- admin nginx admin
drwx - x --- admin nginx WebProject
drwx - x --- admin nginx site
drwx - x --- admin nginx statique
- rwxr ----- admin nginx hmenu.css
Ensuite, comment obtenir cette belle photo? Pour modifier la propriété du groupe pour les dirs, nous appliquons d'abord Sudo chown :nginx /home/admin/WebProject/site/static
, puis répétez la commande en supprimant les répertoires de droite un par un.
Pour modifier les autorisations des répertoires, nous appliquons Sudo chmod g+x /home/admin/WebProject/site/static
et encore une fois les dir.
Changer le groupe des fichiers dans le répertoire/static: Sudo chown -R :nginx /home/admin/WebProject/site/static
Enfin, modifiez les autorisations pour les fichiers dans le répertoire/static: Sudo chmod g+r /home/admin/WebProject/site/static/*
(Bien sûr, on peut créer un groupe dédié et changer le nom d'utilisateur, mais cela obscurcirait la narration avec des détails sans importance.)
La définition de l'utilisateur root dans nginx peut être très dangereuse. Devoir définir des autorisations pour toute la hiérarchie de fichiers peut être fastidieux (imaginez que le chemin complet du dossier se trouve sous plus de 10 sous-dossiers).
Ce que je ferais, c'est de mettre en miroir le dossier que vous souhaitez partager, sous/usr/share/nginx/any_folder_name avec des autorisations pour l'utilisateur configuré de nginx (généralement www-data). C'est possible avec bindfs.
Dans votre cas, je ferais:
Sudo bindfs -u www-data -g www-data /root/downloads/boxes/ /usr/share/nginx/root_boxes
Il montera/root/download/boxes dans/usr/share/nginx/root_boxes avec toutes les autorisations pour l'utilisateur www-data. Maintenant, vous définissez ce chemin dans votre configuration de bloc d'emplacement
location /static {
autoindex on;
alias /usr/share/nginx/root_boxes/;
}
Pour moi, c'était SElinux, j'ai dû exécuter ce qui suit: (RHEL/Centos sur AWS)
Sudo setsebool -P httpd_can_network_connect on
chcon -Rt httpd_sys_content_t /var/www/