Ich erhalte 500 interne Serverfehler, wenn ich versuche, einen HTTP-POST an eine bestimmte Adresse in meiner App zu erstellen. Ich habe mir die Serverprotokolle in dem benutzerdefinierten Protokollverzeichnis angesehen, das in der Datei für virtuelle Hosts angegeben ist, aber der Fehler wird dort nicht angezeigt. Das Debuggen war also ein Problem.
Wie veranlasst ich Apache, interne 500-Fehler im Fehlerprotokoll zu protokollieren?
apache
error-logging
wcolbert
quelle
quelle
Antworten:
Bitte beachten Sie: Das Originalposter fragte nicht speziell nach PHP. Alle PHP-zentrierten Antworten machen große Annahmen, die für die eigentliche Frage nicht relevant sind.
Das Standardfehlerprotokoll weist im Gegensatz zu den Skriptfehlerprotokollen normalerweise den (spezifischeren) Fehler auf. Oft werden Berechtigungen verweigert oder sogar ein Dolmetscher kann nicht gefunden werden.
Dies bedeutet, dass der Fehler fast immer in Ihrem Skript liegt. Beispiel: Sie haben ein Perl-Skript hochgeladen, ihm aber keine Ausführungsberechtigungen erteilt? oder vielleicht wurde es in einer Linux-Umgebung beschädigt, wenn Sie das Skript in Windows schreiben und es dann auf den Server hochladen, ohne dass die Zeilenenden konvertiert werden, wird dieser Fehler angezeigt.
in Perl, wenn Sie vergessen
Sie werden diesen Fehler erhalten
Dafür gibt es viele Gründe. Bitte überprüfen Sie zuerst Ihr Fehlerprotokoll und geben Sie dann weitere Informationen an.
Das Standardfehlerprotokoll befindet sich häufig in
/var/log/httpd/error_log
oder/var/log/apache2/error.log
.Der Grund, warum Sie sich die Standardfehlerprotokolle (wie oben angegeben) ansehen, ist, dass Fehler nicht immer in das benutzerdefinierte Fehlerprotokoll gebucht werden, wie im virtuellen Host definiert.
Nimmt Linux und nicht unbedingt Perl an
quelle
grep PHP /var/log/syslog
. Wahrscheinlich , weil ich hatteerror_log = syslog
in/etc/php5/apache2/php.ini
.Warum werden die 500 internen Serverfehler nicht in Ihren Apache-Fehlerprotokollen protokolliert?
Die Fehler, die Ihren 500 Internal Server Error verursachen, stammen von einem PHP-Modul. Standardmäßig protokolliert PHP diese Fehler NICHT. Der Grund dafür ist, dass Webanfragen so schnell wie möglich ausgeführt werden sollen und es ein Sicherheitsrisiko darstellt, Fehler auf dem Bildschirm zu protokollieren, auf dem Angreifer sie beobachten können.
Diese Anweisungen zum Aktivieren der internen Serverfehlerprotokollierung gelten für
Ubuntu 12.10
mitPHP 5.3.10
undApache/2.2.22
.Stellen Sie sicher, dass die PHP-Protokollierung aktiviert ist:
Suchen Sie Ihre php.ini-Datei:
Bearbeiten Sie diese Datei als root:
Finden Sie diese Zeile in php.ini:
Ändern Sie die obige Zeile in folgende:
Weiter unten in der Datei sehen Sie Folgendes:
Die Semikolons sind Kommentare, dh die Zeilen werden nicht wirksam. Ändern Sie diese Zeilen so, dass sie folgendermaßen aussehen:
Dies kommuniziert mit PHP, dass wir alle diese Fehler protokollieren möchten. Achtung, es wird einen großen Leistungseinbruch geben, daher möchten Sie nicht, dass dies in der Produktion aktiviert wird, da die Protokollierung Arbeit kostet und Arbeit Zeit kostet, Zeit Geld kostet.
Durch einen Neustart von PHP und Apache sollte die Änderung übernommen werden.
Tun Sie, was Sie getan haben, um den 500 Internal Server-Fehler erneut zu verursachen, und überprüfen Sie das Protokoll:
Sie sollten den 500-Fehler am Ende sehen, ungefähr so:
quelle
display_errors
druckt Fehler auf dem Bildschirm .log_errors
schreibt Fehler in die Protokolldatei .Überprüfen Sie Ihr PHP-Fehlerprotokoll, das möglicherweise eine von Ihrem Apache-Fehlerprotokoll getrennte Datei ist.
Finden Sie es, indem Sie zu gehen
phpinfo()
und nach dem Attribut error_log suchen. Wenn es nicht eingestellt ist. Stellen Sie es ein: https://stackoverflow.com/a/12835262/445131Möglicherweise ist Ihre post_max_size zu klein für das, was Sie veröffentlichen möchten, oder eine der anderen maximalen Speichereinstellungen ist zu niedrig.
quelle
Ich bin gerade darauf gestoßen und es lag an einer Fehlkonfiguration von mod_authnz_ldap in meiner .htaccess-Datei. Es wurde absolut nichts protokolliert, aber ich bekam immer wieder einen Fehler von 500.
Wenn Sie auf dieses spezielle Problem stoßen, können Sie die Protokollstufe von mod_authnz_ldap folgendermaßen ändern:
Das verwendet eine Protokoll-Debug-Ebene für mod_authnz_ldap, warnt jedoch vor allem anderen ( https://httpd.apache.org/docs/2.4/en/mod/core.html#loglevel ).
quelle
Wenn dein internen Serverfehlerinformationen nicht in Protokolldateien angezeigt werden, müssen Sie wahrscheinlich den Apache-Dienst neu starten .
Ich habe festgestellt, dass Apache 2.4 (zumindest auf Windows-Plattformen) das Löschen von Protokolldateien hartnäckig ablehnt. Stattdessen bleiben protokollierte Daten eine ganze Weile im Speicher. Unter dem Gesichtspunkt der Leistung ist dies eine gute Idee, die jedoch bei der Entwicklung verwirrend sein kann.
quelle
Die Antworten von @ eric-leschinski sind richtig.
Es gibt jedoch einen anderen Fall, wenn Ihre Server-API FPM / FastCGI ist (Standard unter Centos 8 oder Sie können die Funktion phpinfo () verwenden).
In diesem Fall:
phpinfo()
in einer PHP-Datei;Loaded Configuration File
param, um zu sehen, wo sich die Konfigurationsdatei für Ihr PHP befindet.Überprüfen Sie
Server API
param. Wenn Ihr Server nur die Apache-Handle-API verwendet -> starten Sie den Apache neu. Wenn Ihr Server php-fpm verwendet, müssen Sie den php-fpm-Dienst neu startenÜberprüfen Sie die Protokolldatei im Protokollordner php-fpm. z.B
/var/log/php-fpm/www-error.log
quelle
In meinem Fall war es die ErrorLog-Direktive in httpd.conf. Ich habe es nur aus Versehen bemerkt, nachdem ich aufgegeben habe. Beschlossen, die Entdeckung zu teilen) Jetzt weiß ich, wo die 500-Fehler zu finden sind.
quelle
Fügen Sie
HttpProtocolOptions Unsafe
Ihrer Apache-Konfigurationsdatei hinzu und starten Sie den Apache-Server neu. Es zeigt die Fehlerdetails.quelle
Überprüfen Sie, ob die Version von PHP, die Sie ausführen, mit Ihrer Codebasis übereinstimmt. In Ihrer lokalen Umgebung wird beispielsweise PHP 5.4 ausgeführt (und die Dinge laufen einwandfrei), und Sie testen Ihren Code möglicherweise auf einem neuen Computer, auf dem PHP 5.3 installiert ist. Wenn Sie 5.4-Syntax wie [] für array () verwenden, erhalten Sie die oben beschriebene Situation.
quelle
Versuchen Sie, auf eine statische Datei zuzugreifen. Wenn dies auch nicht funktioniert, gehen Sie zu allen Verzeichnissen vom Stammverzeichnis "/" oder "c: \" in das Verzeichnis Ihrer Datei und prüfen Sie, ob sie ".htaccess" -Dateien enthalten.
Ich habe einmal eine Datei in "c: \" hinterlassen und sie hatte die seltsamsten Ergebnisse.
quelle
Bitte überprüfen Sie, ob Sie die Fehlerberichterstattung irgendwo in Ihrem Code deaktivieren.
Es gab eine Stelle in meinem Code, an der ich ihn deaktiviert habe, also habe ich den Debug-Code danach hinzugefügt:
quelle