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?
Antworten:
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.
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'
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 damitstrace 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 debug
ein Ergebnis angezeigt wird, können Sie das letzte Argument inerror_log
vonerror
bis änderndebug
. Laden Sie Nginx neu und klicken Sie auf eine URL, die in der Domain nicht vorhanden ist. Dies sollte viel Protokollierung generieren. Deaktivieren Sie diedebug
Protokollierung, wenn Sie fertig sind.quelle