Ich habe gerade einen nginx + php-fpm Server installiert. Alles scheint in Ordnung zu sein, außer dass PHP-FPM niemals Fehler in sein Protokoll schreibt.
fpm.conf
[default]
listen = /var/run/php-fpm/default.sock
listen.allowed_clients = 127.0.0.1
listen.owner = webusr
listen.group = webusr
listen.mode = 0666
user = webusr
group = webusr
pm = dynamic
pm.max_children = 50
pm.start_servers = 5
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.status_path = /php/fpm/status
ping.path = /php/fpm/ping
request_terminate_timeout = 30s
request_slowlog_timeout = 10s
slowlog = /var/log/php-fpm/default/slow.log
chroot = /var/www/sites/webusr
catch_workers_output = yes
env[HOSTNAME] = mapsvr.mapking.com
php_flag[display_errors] = on
php_admin_value[error_log] = /var/log/php-fpm/default/error.log
php_admin_flag[log_errors] = on
nginx.conf
server
{
listen 80 default_server;
server_name _;
charset utf-8;
access_log /var/log/nginx/access.log rest;
include conf.d/drops.conf.inc;
location /
{
root /var/www/sites/webusr/htdocs;
index index.html index.htm index.php;
}
# pass the PHP scripts to FastCGI server listening on socket
#
location ~ \.php$
{
root /var/www/sites/webusr/htdocs;
include /etc/nginx/fastcgi_params;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /htdocs/$fastcgi_script_name;
if (-f $request_filename)
{
fastcgi_pass unix:/var/run/php-fpm/default.sock;
}
}
location = /php/fpm/status
{
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fpm/default.sock;
}
location = /php/fpm/ping
{
include /etc/nginx/fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_pass unix:/var/run/php-fpm/default.sock;
}
# redirect server error pages to the static page /50x.html
#
error_page 500 502 503 504 /50x.html;
location = /50x.html
{
root /usr/share/nginx/html;
}
}
Ich habe ein fehlerhaftes PHP-Skript erstellt und ausgeführt und sehe die Fehlerausgabe im Webbrowser. Das Nginx-Fehlerprotokoll gibt auch die stderr-Ausgabe von fpm mit derselben Nachricht an. Ich habe überprüft, ob der Benutzer eine Schreibberechtigung (ich habe sogar 777 ausprobiert) für den festgelegten Protokollordner hat. Sogar die festgelegte error.log-Datei wurde erfolgreich von php-fpm erstellt. Die Protokolldatei ist jedoch immer leer, unabhängig davon, welcher unerhörte Fehler im PHP-Skript gemacht wurde.
Was ist los?
[Den Grund eine ganze Weile später gefunden]
Es war Erlaubnis. Der Eigentümer wurde auf die Benutzer der Websites geändert, um das Problem zu beheben.
Antworten:
Das hat bei mir funktioniert:
Bearbeiten:
Die zu bearbeitende Datei ist die Datei, die Ihren gewünschten Pool konfiguriert. Standardmäßig ist es: /etc/php-fpm.d/www.conf
quelle
/etc/php-fpm.d/www.conf
php_admin_value[error_log]
verstehe , es ist der Wert in derselben Konfigurationsdatei - /var/log/php-fpm/www-error.log unter CentOS 7 , zBsudo vi /etc/php/7.0/fpm/pool.d/www.conf
für michIch hatte lange damit zu kämpfen, bevor ich herausfand, dass meine PHP-Fpm-Protokolle geschrieben wurden
/var/log/upstart/php5-fpm.log
. Es scheint ein Fehler zwischen der Interaktion von Upstart und PHP-Fpm zu sein. Weitere Informationen finden Sie hier: https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1319595quelle
ln -sf /var/log/upstart/php5-fpm.log /var/log/php5-fpm.log
/var/log/php7.0-fpm.log
,php_admin_value[error_log] = /var/log/fpm-php.www.log
wird also auf nicht standardmäßiges Protokoll umgeleitet?Ich hatte ein ähnliches Problem und musste Folgendes mit der
pool.d/www.conf
Datei tunDie Protokolldatei wurde immer noch nicht geschrieben, daher musste ich sie tatsächlich erstellen, indem ich
touch /var/log/fpm-php.www.log
den richtigen Eigentümer festlegtesudo chown www-data:www-data /var/log/fpm-php.www.log
.Sobald dies geschehen war und php5-fpm neu gestartet wurde, wurde die Protokollierung fortgesetzt.
quelle
Es gibt mehrere PHP-Konfigurationsdateien, aber DIESE müssen Sie bearbeiten:
Kommentieren Sie die Zeile aus, in der steht:
Dadurch können die PHPs stderr anstelle von / dev / null in das Fehlerprotokoll von php-fpm wechseln.
quelle
/usr/local/etc/php-fpm.d/
/var/log/php7.0-fpm.log
, um/var/log/fpm-php.www.log
oder um?Ich habe hier aus einer Reihe von Antworten Erkenntnisse gewonnen und präsentiere eine umfassende Lösung:
Wenn Sie also nginx mit php5-fpm einrichten und eine Nachricht mit protokollieren,
error_log()
können Sie diese/var/log/nginx/error.log
standardmäßig anzeigen .Ein Problem kann auftreten, wenn Sie viele Daten (z. B. ein Array) mit protokollieren möchten
error_log(print_r($myArr, true));
. Wenn ein Array groß genug ist,nginx
wird Ihr Protokolleintrag anscheinend abgeschnitten.Um dies zu umgehen, können Sie
fpm
( php.net fpm config ) konfigurieren , um Protokolle zu verwalten. Hier sind die Schritte dazu.Öffnen
/etc/php5/fpm/pool.d/www.conf
:$ sudo nano /etc/php5/fpm/pool.d/www.conf
Kommentieren Sie die folgenden zwei Zeilen aus, indem Sie sie
;
am Zeilenanfang entfernen : (error_log ist hier definiert: php.net );php_admin_value[error_log] = /var/log/fpm-php.www.log ;php_admin_flag[log_errors] = on
Erstellen
/var/log/fpm-php.www.log
:$ sudo touch /var/log/fpm-php.www.log;
Ändern Sie den Besitz von,
/var/log/fpm-php.www.log
damit php5-fpm ihn bearbeiten kann:$ sudo chown vagrant /var/log/fpm-php.www.log
Hinweis:
vagrant
ist der Benutzer, dem ich das Eigentum geben muss. Sie können sehen, welcher Benutzer dies für Sie sein sollte, indem Sie die$ ps aux | grep php.*www
erste Spalte ausführen und betrachten.Starten Sie php5-fpm neu:
$ sudo service php5-fpm restart
Jetzt sind Ihre Protokolle in
/var/log/fpm-php.www.log
.quelle
phpinfo()
und prüfen Sie, ob diese Einstellungen tatsächlich übernommen wurden, @SudharshanNair./var/log/fpm-php.www.log
. Noch ist diese Datei leerlog_errors
Fehler aktiviert sind, müssen Sie nur die Berechtigung und den Besitz der Datei überprüfen (Schritt 4).www-data:www-data
, immer noch kein Glück. Irgendeine Idee ?Es gibt einen Fehler https://bugs.php.net/bug.php?id=61045 in php-fpm von v5.3.9 und bis jetzt (5.3.14 und 5.4.4). Der vom Entwickler versprochene Fix wird in der nächsten Version veröffentlicht. Wenn Sie nicht warten möchten, verwenden Sie den Patch auf dieser Seite und erstellen Sie ihn neu oder führen Sie einen Rollback auf 5.3.8 durch.
quelle
In Ihrer Datei fpm.conf haben Sie keine 2 Variablen festgelegt, die nur für die Fehlerprotokollierung vorgesehen sind
Diese Variablen sind error_log (Dateipfad Ihrer Fehlerprotokolldatei) log_level (Fehlerprotokollierungsstufe)
;; Fehlerprotokolldatei; Hinweis: Das Standardpräfix lautet / usr / local / php / var. Standardwert: log / php-fpm.log
;; Protokollstufe; Mögliche Werte: Alarm, Fehler, Warnung, Hinweis, Debug; Standardwert: Hinweis
quelle
/usr/local/var/php
statt/usr/local/php/var
? nur spekulieren.In meinem Fall zeige ich, dass das Fehlerprotokoll zu /var/log/php-fpm/www-error.log ging . Deshalb habe ich diese Zeile in /etc/php-fpm.d/www.conf kommentiert
und wie oben gesagt habe ich diese Zeile auch auskommentiert
Jetzt kann ich Protokolle in der von nginx angegebenen Datei sehen.
quelle
Ich möchte den vorhandenen Antworten einen weiteren Tipp hinzufügen, da sie mein Problem nicht gelöst haben.
Achten Sie auf die folgende Nginx-Direktive in Ihrem PHP-Standortblock:
Das Entfernen dieser Linie hat viele Stunden des Kämpfens und Ziehens an den Haaren beendet.
Es könnte in einem enthaltenen conf-Verzeichnis wie
/etc/nginx/default.d/php.conf
in meinem Fedora versteckt sein .quelle
In meinem Fall gibt php-fpm 500 Fehler ohne Protokollierung aus, da das php-mysql-Modul fehlt. Ich habe die Joomla-Installation auf einen anderen Server verschoben und vergessen. Also
apt-get install php-mysql
und Service Neustart löste es.Ich begann mit dem Versuch, fehlerhafte Protokollierung ohne Erfolg zu beheben. Schließlich
strace
fand ich nach db-bezogenen Systemaufrufen eine Fehlermeldung. Obwohl mein Fall nicht direkt mit der Frage von op zusammenhängt, hoffe ich, dass er nützlich sein könnte.quelle
Überprüfen Sie das Eigentümerverzeichnis von "PHP-FPM"
Du kannst tun:
quelle