J'ai installé nginx avec PHP-FPM sur une boîte CentOS 5, mais j'ai du mal à le faire servir l'un de mes fichiers - que ce soit PHP ou non.
Nginx s'exécute en tant que www-data: www-data, et le site par défaut "Welcome to nginx on EPEL" (appartenant à root: root avec 644 permissions) se charge correctement.
Le fichier de configuration nginx a une directive d' inclusion pour /etc/nginx/sites-enabled/*.conf, et j'ai un fichier de configuration example.com.conf , donc:
server {
listen 80;
Virtual Host Name
server_name www.example.com example.com;
location / {
root /home/demo/sites/example.com/public_html;
index index.php index.htm index.html;
}
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param PATH_INFO $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME /home/demo/sites/example.com/public_html$fastcgi_script_name;
include fastcgi_params;
}
}
Bien que public_html appartienne à www-data: www-data avec 2777 autorisations de fichier, ce site ne parvient à diffuser aucun contenu -
[error] 4167#0: *4 open() "/home/demo/sites/example.com/public_html/index.html" failed (13: Permission denied), client: XX.XXX.XXX.XX, server: www.example.com, request: "GET /index.html HTTP/1.1", host: "www.example.com"
J'ai trouvé de nombreux autres articles avec des utilisateurs obtenant des 403 de nginx, mais la plupart que j'ai vus impliquent des configurations plus complexes avec Ruby / Passenger (avec lesquelles j'ai réussi dans le passé) ou ne reçoivent des erreurs que lorsque PHP en amont -FPM est impliqué, donc ils semblent être de peu d'aide.
Ai-je fait quelque chose de stupide ici?
la source
Réponses:
Une exigence d'autorisation qui est souvent négligée est qu'un utilisateur a besoin d'autorisations x dans chaque répertoire parent d'un fichier pour accéder à ce fichier. Vérifiez les autorisations sur /, / home, / home / demo, etc. pour l'accès www-data x. Je suppose que / home est probablement 770 et que www-data ne peut pas le parcourir pour accéder à un sous-répertoire. Si c'est le cas, essayez chmod o + x / home (ou quel que soit le répertoire qui refuse la demande).
MODIFIER: Pour afficher facilement toutes les autorisations sur un chemin, vous pouvez utiliser
namei -om /path/to/check
la source
chmod -4 +x /mypath
travaillé pour moi) nginxlibrary.com/403-forbidden-errorSi vous voyez toujours
permission denied
après avoir vérifié les autorisations des dossiers parents, il se peut que SELinux restreigne l'accès.Pour vérifier si SELinux est en cours d'exécution:
Pour désactiver SELinux jusqu'au prochain redémarrage:
Redémarrez Nginx et voyez si le problème persiste. Pour permettre à nginx de servir votre répertoire www (assurez-vous de réactiver SELinux avant de tester cela. C.-à-d.
setenforce Enforcing
)Voir ma réponse ici pour plus de détails
la source
open() "/usr/share/nginx/logs/xxxxxx.com-error_log" failed (13: Permission denied)
après avoir vérifié les autorisations et m'être assuré qu'il était démarré en tant que root. Je suis tombé sur cela et j'ai découvert que SELinux était activé. Je l'ai désactivé et maintenant cela fonctionne sans problème. Merci!user
de nginx en root in/var/nginx/nginx.conf
- peut-être que cela aidera quelqu'un d'autre qui rencontrera ce problème. S / O à DataPsyche pour la deuxième partie.setsebool httpd_read_user_content on
(Pour les fichiers statiques hébergés à partir d'un répertoire personnel, chmod'ed en lecture universelle) - Bien que je suppose que la méthode de @ KapiteinWitbaard ci-dessus est plus sécurisée.J'ai résolu ce problème en ajoutant des paramètres utilisateur.
dans nginx.conf
changez le 'nom d'utilisateur' avec le nom d'utilisateur Linux.
la source
J'ai cette erreur et je l'ai finalement résolue avec la commande ci-dessous.
Le problème est causé lorsque vous passez quelque chose d'un endroit à un autre. Il préserve le contexte selinux de l'original lorsque vous le déplacez, donc si vous décompressez quelque chose dans / home ou / tmp, il obtient un contexte selinux qui correspond à son emplacement. Maintenant, vous envoyez cela à / var / www / html et il prend le contexte disant qu'il appartient à / tmp ou / home avec lui et httpd n'est pas autorisé par la politique à accéder à ces fichiers.
Si vous cp les fichiers au lieu de les mv, le contexte selinux est attribué en fonction de l'emplacement vers lequel vous copiez, pas d'où il vient. L'exécution de restorecon remet le contexte à sa valeur par défaut et le corrige également.
la source
J'ai essayé différents cas et seulement lorsque le propriétaire était défini sur nginx (
chown -R nginx:nginx "/var/www/myfolder"
) - cela a commencé à fonctionner comme prévu.la source
Si vous utilisez SELinux, tapez simplement:
Cela résoudra le problème d'autorisation.
la source
Ancienne question, mais j'ai eu le même problème. J'ai essayé toutes les réponses ci-dessus, rien n'a fonctionné. Ce qui a résolu le problème pour moi, c'est de supprimer le domaine et de l'ajouter à nouveau. J'utilise Plesk et j'ai installé Nginx APRÈS que le domaine était déjà là.
J'ai d'abord fait une sauvegarde locale sur / var / www / backups. Je pourrais donc facilement recopier les fichiers.
Problème étrange ...
la source
Nous avons eu le même problème, en utilisant Plesk Onyx 17. Au lieu de gâcher les droits, etc., la solution était d'ajouter l'utilisateur nginx dans le groupe psacln, dans lequel tous les autres propriétaires de domaine (utilisateurs) étaient:
Désormais, nginx a le droit d'accéder au .htaccess ou à tout autre fichier nécessaire pour afficher correctement le contenu.
D'autre part, assurez-vous également qu'Apache est dans le groupe psaserv, pour servir du contenu statique:
Et n'oubliez pas de redémarrer Apache et Nginx dans Plesk après! (et rechargez les pages avec Ctrl-F5)
la source
usermod -aG username www-data
sur la plupart des configurations.Je me suis plongé dans une légère variante de ce problème en exécutant la
setfacl
commande par erreur . L'Iran:J'ai abandonné cette route en faveur de l'ajout
nginx
aufoo
groupe, mais cette ACL personnalisée déjouait les tentatives de nginx d'accéder au fichier. Je l'ai effacé en exécutant:Et puis nginx a pu accéder aux fichiers.
la source
Si vous utilisez PHP, assurez-vous que la
index
directive NGINX dans le bloc serveur contient un index.php:index index.php index.html;
Pour plus d'informations, consultez la directive index dans la documentation officielle.
la source
J'étais confronté au même problème, mais les solutions ci-dessus n'ont pas aidé.
Ainsi, après beaucoup de lutte, j'ai découvert que sestatus était configuré pour appliquer ce qui bloque tous les ports et en le paramétrant sur permissif, tous les problèmes ont été résolus.
J'espère que cela aide quelqu'un comme moi.
la source