nginx protokolliert keine Fehler in Protokolldateien

7

Ich habe kürzlich meinen CentOS 7-Computer von Apache auf Nginx umgestellt und arbeite immer noch an den Unterschieden. Ein Problem, das ich nur bei einem meiner Serverblöcke festgestellt habe, ist, dass Zugriffs- und Fehlerprotokolldateien nicht tatsächlich protokolliert werden, was es schwierig macht, potenzielle Probleme zu beheben.

Der Serverblock für meine Site sieht folgendermaßen aus:

server {
    listen       80;
    server_name  example.com;
    root         /var/www/example.com/public_html;
    index        index.php;
    access_log   /var/www/example.com/logs/example.com_access.log;
    error_log    /var/www/example.com/logs/example.com_error.log error;

    location / {
        index index.php index.html;
    }

    location /reports {
        autoindex on;
    }

    location ~ \.php$ {
        try_files          $uri =404;
        fastcgi_pass       unix:/var/run/php-fpm/php-fpm.sock;
        fastcgi_param      SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include            fastcgi_params;
    }

    error_page 404 /var/www/html/404.html;
    error_page 500 502 503 504 /var/www/html/50x.html;

    location ~* \.(js|css|png|jpg|jpeg|gif|ico)$ {
        expires max;
        log_not_found off;
    }

    location /robots.txt {
        #access_log off;
        #log_not_found off;
    }

    location ~ /\.ht {
        deny all;
    }
}

Ich bin mir nicht sicher, warum die Protokolle nicht aufbewahrt werden. Ich habe Dateiberechtigungen für meine Serverblöcke verglichen, und alle haben dieselben Berechtigungen.

-rw-r--r--. 1 nginx root    0 Nov  7 02:54 example.com_access.log
-rw-r--r--. 1 nginx root    0 Nov  7 02:54 example.com_error.log

Was könnte das Problem sein, warum Protokolle nicht gespeichert werden?

Justin
quelle
1
Hat der Nginx-Benutzer Zugriff auf das Verzeichnis /var/www/example.com/logs/?
Aaron Mason
@AaronMason Das Verzeichnis gehört root (Benutzer und Gruppe), es sind jedoch genau die gleichen Berechtigungen wie bei anderen Serverblöcken auf dem Computer, die erfolgreich in Protokolle schreiben können.
Justin

Antworten:

10

Die Nginx-Syntax ist hier korrekt, daher hat das Problem mit der Serverumgebung zu tun. Hier sind einige Dinge, die Sie tun können, um es zu debuggen.

  1. Simulieren Sie, was der Webserver tun würde. Versuchen Sie, mit demselben Benutzer, den der Webserver verwenden würde, in die Datei zu schreiben. Wenn der Webserver-Benutzer nginx ist, versuchen Sie dies als root: su -m nginx -c 'echo "testing">>/var/www/example.com/logs/example.com_error.log'

  2. Beobachten Sie, was der Webserver tut. Als vorübergehende Debugging-Maßnahme fügen Sie auf der obersten Ebene Ihrer Nginx-Konfiguration hinzu daemon off. Dann stoppen Sie Nginx und beginnen Sie damit strace nginx | tee nginx-output.txt. Es wird dann im Vordergrund ausgeführt und spuckt alle Systemaufrufe an STDOUT aus, die auch in nginx-output.txt erfasst werden. Wenn Sie etwas tun, um den Fehler auszulösen, können Sie Nginx stoppen, die Zeile "Daemon" entfernen und sie normal starten, während Sie das Debugging-Protokoll überprüfen. Suchen Sie darin nach Erwähnungen des betreffenden Dateinamens. Vielleicht finden Sie es dort, wenn ein Fehler vom Systemaufruf zurückgegeben wird, der versucht, auf die Datei zuzugreifen.

Eine andere Möglichkeit besteht darin, dass Sie mit Nginx nicht einverstanden sind, was im Fehlerprotokoll angezeigt werden soll. Wenn nginx -V | grep debugein Ergebnis angezeigt wird, können Sie das letzte Argument in error_logvon errorbis ändern debug. Laden Sie Nginx neu und klicken Sie auf eine URL, die in der Domain nicht vorhanden ist. Dies sollte viel Protokollierung generieren. Deaktivieren Sie die debugProtokollierung, wenn Sie fertig sind.

Mark Stosberg
quelle