Nginx / PHP-FPM-Fehler "Zugriff verweigert"

14

Ich versuche, einen frisch installierten Ubuntu-Server (12.04) einzurichten, aber ich kann keine PHP-Dateien über php-fpm ausführen. Egal was ich tue, ich erhalte immer die Meldung "Zugriff verweigert". Seite (Klartext, nicht HTML oder irgendetwas).

Installierte Pakete:

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

Konfigurationsdetails:

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; }

Standard- / Testdomain:

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();

Alles andere ist Standard. Sowohl das Nginx- als auch das php-fpm-Protokoll zeigen keine Fehler an. Beim Laden http://<server-ip>/index.phperhalte ich jedoch die Seite "Zugriff verweigert".

Fehlerbehebung:

  • Die Datei index.html funktioniert einwandfrei. Daher muss es entweder php-fpm oder die Fastcgi-Bindung zwischen Nginx und php-fpm sein.
  • Ich habe den Besitz (sowohl Benutzer als auch Gruppe) des gesamten /extraVerzeichnisses auf www-dataund den Besitz auf 777 gesetzt, nur um sicherzugehen (ich werde ihn abschwächen, sobald er natürlich funktioniert). Es handelt sich also mit Sicherheit nicht um eine Berechtigungsfrage
  • Es ist nicht das security.limit_extensions- Problem, das ich häufig sehe: Standardmäßig ist es auf .php gesetzt, genau das, was ich anfordere. Ich habe es ausdrücklich eingestellt .php .html, mit dem gleichen Ergebnis.

Ich habe es wirklich satt, ich habe dieses Setup bereits zweimal installiert (allerdings auf OSX-Rechnern) und alles hat einwandfrei funktioniert. Gibt es etwas, was ich übersehen habe?

Der Protokollinhalt:

Das Nginx-Fehlerprotokoll ist leer.

Nginx-Zugriffsprotokoll (entfernte IP-Adresse):

<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 "-" "-"

php-fpm log:

[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
quelle

Antworten:

33

Endlich behoben.

Der Täter war diese Zeile in meiner Konfiguration:

fastcgi_param   PATH_TRANSLATED     $document_root$fastcgi_path_info;

Wenn ich diese Zeile kommentierte, funktionierte alles gut. Allerdings habe ich das in fast jedem Post gesehen, den ich über Nginx-Konfigurationen gelesen habe, also hat es mich gestört. Als ich meine Configs zum millionsten Mal betrachtete, sah ich, dass cgi.fix_pathinfo(in php.ini) auf 0 gesetzt war, wo es 1 hätte sein sollen. Der Standardwert, den PHP verwendet, ist ebenfalls 1, deshalb muss ich dies in meinen Debugging-Stunden geändert haben, weil ich Erinnern Sie sich, diesen Wert gelesen zu haben, und dachten, er sei richtig eingestellt.

Wie auch immer, vielleicht hilft es jemandem, für dieses Problem zu googeln.

Peter Kruithof
quelle
5
Vielen Dank, dass Sie die Lösung geteilt haben. Es wird empfohlen , den Lernprogrammen nicht zu vertrauen, da diese Lernprogramme möglicherweise ungesicherte Konfigurationen enthalten. Diese Konfigurationen funktionieren jedoch möglicherweise weiterhin ordnungsgemäß.
Pothi Kalimuthu
Vielen Dank für den Link, ich bin ein paar Mal darauf gestoßen und habe diese Anweisungen angewendet. Der Fehler war wahrscheinlich mein eigener in meiner Debugging-Wut (nach x Stunden beginnt man, einige der Dinge aus den Augen zu verlieren, die man geändert hat).
Peter Kruithof
Meins war ein chownProblem.
Jürgen Paul
Ich danke dir sehr. Dieses Problem wurde stundenlang bearbeitet und cgi.fix_pathinfoauf 0 (Standardkonfiguration) gesetzt.
Mauvis Ledford
2
cgi.fix_pathinfo = 0wird von vielen Tutorials empfohlen, da es dabei hilft, Schwachstellen zu minimieren, insbesondere Schwachstellen, bei denen PHP-Code über beliebige Dateien ausgeführt wird. Wenn Sie dies auf 1 setzen, stellen Sie sicher, dass Sie wissen, was Sie tun, oder geben Sie andere Abhilfemaßnahmen an, um dies auszugleichen. Ich fand diesen Beitrag gut erklärt: nealpoole.com/blog/2011/04/…
MikeD