Erreur "Accès refusé." Nginx / PHP-FPM

14

J'essaie de configurer un serveur Ubuntu (12.04) fraîchement installé, mais je ne peux pas faire fonctionner les fichiers PHP via php-fpm. Peu importe ce que je fais, je reçois toujours un «Accès refusé». page (texte brut, pas html ou quoi que ce soit).

Paquets installés:

nginx
nginx-common
nginx-full
php5
php5-cli
php5-common
php5-fpm

Détails de configuration:

PHP-FPM:

user = www-data
group = www-data
listen = /var/run/php5-fpm.sock

Nginx:

user www-data;
worker_processes 3;
events { worker_connections 1024; }

Domaine par défaut / test:

server {
    listen       80;
    server_name  localhost;
    root         /extra/htdocs/default;
    index        index.html index.php

    access_log   /extra/logs/default/access.log;
    error_log    /extra/logs/default/error.log;

    location / {
        try_files  $uri $uri/ /index.html;
    }

    location ~ \.php
    {
        fastcgi_split_path_info  ^(.+\.php)(/.+)$;

        include fastcgi_params;

        fastcgi_index   index.php;
        fastcgi_pass    unix:/var/run/php5-fpm.sock;
        fastcgi_param   PATH_INFO         $fastcgi_path_info;
        fastcgi_param   PATH_TRANSLATED   $document_root$fastcgi_path_info;
        fastcgi_param   SCRIPT_FILENAME   $document_root$fastcgi_script_name;
    }
}

/extra/htdocs/default/index.php:

<?php
phpinfo();

Tout le reste est par défaut. Les journaux Nginx et php-fpm ne montrent aucune erreur. Pourtant, lorsque je charge, http://<server-ip>/index.phpj'obtiens la page "Accès refusé".

Dépannage:

  • Le fichier index.html fonctionne très bien. Il doit donc s'agir soit de php-fpm, soit de la liaison fastcgi entre Nginx et php-fpm.
  • J'ai défini la propriété (à la fois utilisateur et groupe) de l'ensemble du /extrarépertoire www-dataet la propriété à 777, juste pour être sûr (je le baisserai une fois que cela fonctionnera bien sûr). Ce n'est donc certainement pas un problème d'autorisations
  • Ce n'est pas le problème security.limit_extensions que je vois beaucoup: par défaut, il est défini sur .php, ce qui est exactement ce que je demande. Je l'ai explicitement défini sur .php .html, avec le même résultat.

Je suis vraiment fatigué de cela, j'ai déjà installé cette configuration deux fois (bien que sur les machines OSX), et tout a fonctionné parfaitement. Y a-t-il quelque chose que j'oublie?

Le contenu du journal:

Le journal des erreurs Nginx est vide.

Journal d'accès Nginx (IP supprimée):

<ip> - - [17/Jul/2012:11:21:25 +0200] "GET /favicon.ico HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:28 +0200] "GET /index.php HTTP/1.1" 403 46 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_4) AppleWebKit/536.11 (KHTML, like Gecko) Chrome/20.0.1132.57 Safari/536.11"
<ip> - - [17/Jul/2012:11:21:34 +0200] "-" 400 0 "-" "-"

journal php-fpm:

[17-Jul-2012 10:44:14] NOTICE: fpm is running, pid 4969
[17-Jul-2012 10:44:14] NOTICE: ready to handle connections
Peter Kruithof
la source

Réponses:

33

Enfin corrigé.

Le coupable était cette ligne dans ma config:

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

Si j'ai commenté cette ligne, tout a bien fonctionné. Cependant, je l'ai vu dans presque tous les articles que j'ai lus sur les configurations Nginx, donc cela m'a dérangé. En regardant mes configurations pour la millionième fois, j'ai vu que cgi.fix_pathinfo(in php.ini) était réglé sur 0, où il aurait dû être 1. La valeur par défaut utilisée par PHP est également 1, donc j'ai dû changer cela pendant mes heures de débogage, car je souvenez-vous d'avoir lu cette valeur et pensé qu'elle était correcte.

Quoi qu'il en soit, cela aide peut-être n'importe qui sur Google pour ce problème.

Peter Kruithof
la source
5
Merci d'avoir partagé la solution. Il est recommandé de ne pas faire confiance aux didacticiels car ces didacticiels peuvent contenir des configurations non sécurisées. Cependant, ces configurations peuvent toujours fonctionner correctement.
Pothi Kalimuthu
Merci pour le lien, je l'ai rencontré plusieurs fois et j'ai appliqué ces instructions. L'erreur était probablement la mienne dans ma rage de débogage (après x heures, vous commencez à perdre de vue certaines des choses que vous avez modifiées).
Peter Kruith du
Le mien était un chownproblème.
Jürgen Paul
Merci beaucoup. J'ai travaillé sur ce problème pendant des heures et cgi.fix_pathinforéglé sur 0 (configuration par défaut) était le problème.
Mauvis Ledford
2
cgi.fix_pathinfo = 0est recommandé par de nombreux tutoriels car il permet d'atténuer les vulnérabilités, en particulier les vulnérabilités exécutant du code php via des fichiers arbitraires. Donc, si vous définissez cette valeur sur 1, assurez-vous de savoir ce que vous faites ou spécifiez d'autres atténuations pour compenser cela. J'ai trouvé ce post pour avoir une bonne explication sur le problème: nealpoole.com/blog/2011/04/…
MikeD