nginx + PHP-FPM = «permission refusée» erreur 13 dans le journal nginx; erreur de configuration?

20

J'ai nginx 0.7x + PHP-FPM fonctionnant sous PHP 5.2.10 sur un serveur RHEL5, mais j'essaie de reproduire cette configuration sous PHP-FPM intégré en PHP 5.3.3 sur un deuxième serveur, je rencontre des problèmes avec les erreurs d'autorisation à chaque fois qu'il y a un GET.

FPM est démarré et a confirmé que fastcgi écoute sur 9000, mais chaque fois que je fais un GET, je vois cette erreur dans le journal nginx:

2010/08/12 23:38:53 [crit] 5019#0: *5 stat() "/home/noisepages/www/" failed (13: Permission denied), client: 24.215.173.141, server: dev.noisepages.com, request: "GET / HTTP/1.1", host: "dev.noisepages.com"

Barebones nginx.conf.default fonctionne, au moins. Voici mon nginx.conf

server {
        listen       80;
        server_name  dev.noisepages.com;
        root   /home/noisepages/www;
        index  index.html index.htm index.php;

        access_log  logs/dev.access.log;
 error_log logs/dev.error.log;

        location / {

 if (-f $request_filename) {
  expires 30d;
  break;
  }

 # this sends all non-existing file or directory requests to index.php
 rewrite ^.*/files/(.*) /wp-includes/ms-files.php?file=$1;
 if (!-e $request_filename) {
     rewrite ^.+?(/wp-.*) $1 last;
  rewrite ^.+?(/.*\.php)$ $1 last;
  rewrite ^ /index.php last;
  }
        }

        location ~ \.php$ {
            include        fastcgi_params;
            fastcgi_pass   unix:/dev/shm/php-fastcgi.sock;
            fastcgi_index  index.php;
            fastcgi_param  SCRIPT_FILENAME    /home/dev/www/$fastcgi_script_name;
        }
    }

(Les directives de réécriture supplémentaires sont destinées à l'utilisation de WordPress multisite aka WordPress MU)

J'ai également vérifié que l'utilisateur www-data est déclaré non seulement dans nginx.conf mais aussi dans php-fpm.conf pour les valeurs d'utilisateur et de groupe.

Peut-être que je ne comprends pas ce qui cause le message d'erreur 13? Curieusement, j'avais essayé de configurer dev.noisepages.com sur le premier serveur en parallèle à quelques autres hôtes virtuels - chacun fonctionnant bien - et j'ai eu la même erreur.

Peter Kirn
la source

Réponses:

57

Vous devez vous assurer que vous avez +xsur tous les répertoires dans le chemin menant à la racine du site - donc /home, /home/noisepageset/home/noisepages/www

ours
la source
2
Oui, en fait, www avait les bonnes autorisations mais pas tout le chemin! Merci! C'est logique - une erreur stupide de ma part.
Peter Kirn
1
Si je pouvais vous donner 10 autres votes positifs, je le ferais.
Tim
Tu es vraiment sympa! Je passe 2 heures sur google pour trouver votre réponse! Je vous remercie!
Serhii Polishchuk
Merci beaucoup! Je jouais sur un serveur de production et je me suis noyé de sueur froide quand c'est arrivé ...!
lephleg
5

assurez-vous que / home / dev a les autorisations correctes

chmod +x /home/dev
Mike
la source
2

J'ai également eu des problèmes avec les autorisations dans php-fpm, en particulier avec les sessions php. Il s'est avéré que je devais juste modifier l'utilisateur que php-fpm utilise pour exécuter les processus, car par défaut, il était défini sur "personne".

tutoriel à ce sujet ici: http://www.duchnik.com/tutorials/setting-up-php-with-nginx/

Rob
la source
3
Bien que cela puisse théoriquement répondre à la question, il serait préférable d'inclure ici les parties essentielles de la réponse et de fournir le lien de référence.
Scott Pack
3
Le lien est mort ..
Christoph Bühler
1

J'ai eu un problème similaire qui m'a amené ici. Ma solution (basée sur la réponse choisie) était de faire un

chown -R root:www-data /home/noisepages/www
chmod g+w -R /home/noisepages/www

Maintenant ça marche bien :)

Scott Warren
la source
Mais comment pouvez-vous le faire si vous utilisez des utilisateurs Chroot? Lorsque vous utilisez des utilisateurs chrootés, le dossier / home / user / www doit appartenir à l'utilisateur, et cela ne fonctionne pas.
Vincent LITUR
Désolé, je ne sais pas :(
Scott Warren