Nginx ist ein Open-Source-Hochleistungs-HTTP- und Reverse-Proxy-Server, der für die Bewältigung der Auslastung einiger der größten Websites im Internet verantwortlich ist. Eine der häufigsten Aufgaben, die Sie bei der Verwaltung eines NGINX-Webservers ausführen, ist die Überprüfung von Protokolldateien.
Zu wissen, wie man Protokolle konfiguriert und liest, ist bei der Behebung von Server- oder Anwendungsproblemen sehr nützlich, da sie detaillierte Debugging-Informationen liefern.
Nginx verwendet zwei Arten von Protokollen, um seine Ereignisse aufzuzeichnen: Zugriffsprotokolle und Fehlerprotokolle. Die Zugriffsprotokollierung zeichnet Informationen zu Clientanforderungen auf, und die Fehlerprotokollierung zeichnet Informationen zu Server- und Anwendungsproblemen auf.
Nginx generiert jedes Mal, wenn eine Kundenanfrage verarbeitet wird, einen neuen Datensatz im Zugriffsprotokoll. Jeder Ereignisdatensatz enthält einen Zeitstempel und verschiedene Informationen über den Client und die angeforderte Ressource. Zugriffsprotokolle können den Standort des Besuchers, die vom Besucher besuchten Seiten usw. anzeigen. Mit der
log_format
-Direktive können Sie das Format der Protokollierung definieren. Die access_log
-Direktive aktiviert und legt den Speicherort und das Format von Protokolldateien fest. log_format
指令允许你定义记录日志的格式。 access_log
指令启用并设置日志文件的位置和使用的格式。
access_log
指令的最基本语法如下:
access_log log_file log_format;
其中 log_file
是日志文件的完整路径, log_format
是日志文件使用的格式。可以在 http
, server
或 location
指令的上下文中启用访问日志。
默认情况下,Nginx主配置文件中的 http
指令配置了全局访问日志格式。
http { ... access_log /var/log/nginx/access.log; ... }
/etc/nginx/nginx.conf
为获得更好的可维护性,建议为每个服务器设置一个单独的访问日志文件。在 server
指令中设置的 access_log
指令将覆盖在 http
指令中设置的 access_log
。
http { ... access_log /var/log/nginx/access.log; ... server { server_name domain.com access_log /var/log/nginx/domain.access.log; ... } }
/etc/nginx/conf.d/domain.com.conf
如果未指定日志格式,Nginx将使用预定义的combined组合格式,如下所示:
log_format combined '$remote_addr - $remote_user [$time_local] ' '"$request" $status $body_bytes_sent ' '"$http_referer" "$http_user_agent"';
要更改日志记录格式,请覆盖默认设置或定义一个新设置。例如,定义一个名为 main
的新日志记录格式,它将用添加 X-Forwarded-For
header的值来扩展 combined
格式,在 http
或 server
中添加以下定义指令:
log_format custom '$remote_addr - $remote_user [$time_local] "$request" ' '$status $body_bytes_sent "$http_referer" ' '"$http_user_agent" "$http_x_forwarded_for"';
要使用新日志格式,请在日志文件后指定其名称,如下所示:
access_log /var/log/nginx/access.log custom;
虽然访问日志提供了非常有用的信息。但它会占用磁盘空间,并可能影响服务器性能。如果服务器资源不足,并且网站繁忙,则可能要禁用访问日志。为此,请将 access_log
伪指令的值设置为 off
。理论上你不会出现这种情况,Nginx会自动删除前期的日志文件:
access_log off;
Nginx将应用程序和常规服务器错误的消息写入错误日志文件。如果你在Web应用程序中遇到错误,则错误日志是你开始进行排查问题的第一个位置。 error_log
指令启用并设置错误日志的位置和严重性级别。它采用以下格式,可以在 http
, server
或 location
上下文中进行设置:
error_log log_file log_level
log_level
参数设置日志记录级别。以下是按严重性从低到高列出的级别:
debug info notice warn error crit alert emerg
每个日志级别包括更高级别。例如,如果你将日志级别设置为 warn
,则Nginx还将记录 error
, crit
, alert
和 emerg
消息。未指定 log_level
参数时,默认为 error
。默认情况下, error_log
指令在主nginx.conf文件内的 http
指令上下文中定义:
http { ... error_log /var/log/nginx/error.log; ... }
/etc/nginx/nginx.conf与访问日志相同,建议为每个服务器设置一个单独的错误日志文件,该文件将覆盖更高级别的设置如http指令上下文。例如,要将domain.com的错误日志设置为 warn
,你可以使用:
http { ... error_log /var/log/nginx/error.log; ... server { server_name domain.com error_log /var/log/nginx/domain.error.log warn; ... } }
无论何时修改配置文件,都必须重新加载Nginx服务,以使更改生效。
在大多数Linux发行版中,例如Ubuntu ,CentOS和Debian。默认情况下,访问和错误日志位于 /var/log/nginx
目录中。
你可以使用 cat
, less
, grep
, cut
, awk
access_log
-Direktive lautet wie folgt: 🎜192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1" 200 396 "-" "Mozilla/0 (X11; Linux x86_64) AppleWebKit/536 (KHTML, like Gecko) Chrome/38120 Safari/536"
log_file
der vollständige Pfad der Protokolldatei und log_format</code ist > ist das für die Protokolldatei verwendete Format. Die Zugriffsprotokollierung kann im Kontext einer <code>http
-, server
- oder location
-Anweisung aktiviert werden. 🎜🎜Standardmäßig konfiguriert die http
-Direktive in der Nginx-Hauptkonfigurationsdatei das globale Zugriffsprotokollformat. 🎜rrreee🎜/etc/nginx/nginx.conf🎜🎜Für eine bessere Wartbarkeit wird empfohlen, für jeden Server eine separate Zugriffsprotokolldatei einzurichten. Die in der server
-Direktive festgelegte access_log
-Direktive überschreibt die in der http
-Direktive festgelegte access_log
-Direktive. 🎜rrreee🎜/etc/nginx/conf.d/domain.com.conf🎜🎜Wenn kein Protokollformat angegeben ist, verwendet Nginx das vordefinierte kombinierte Format wie folgt: 🎜rrreee🎜Um das Protokollierungsformat zu ändern, überschreiben Sie die Standardeinstellung oder definieren Sie sie eine neue Einstellung. Definieren Sie beispielsweise ein neues Protokollierungsformat namens main
, das das combined
-Format erweitert, indem es den Wert des X-Forwarded-For
-Headers hinzufügt. Fügen Sie die folgende Definitionsanweisung in http
oder server
hinzu: 🎜rrreee🎜Um das neue Protokollformat zu verwenden, geben Sie seinen Namen nach der Protokolldatei wie folgt an: 🎜rrreee🎜 Obwohl Zugriff Protokolle liefern sehr nützliche Informationen. Es beansprucht jedoch Speicherplatz und kann die Serverleistung beeinträchtigen. Wenn die Ressourcen Ihres Servers knapp werden und Ihre Site ausgelastet ist, möchten Sie möglicherweise Zugriffsprotokolle deaktivieren. Setzen Sie dazu den Wert der access_log
-Direktive auf off
. Theoretisch werden Sie diese Situation nicht haben, Nginx löscht automatisch die vorherigen Protokolldateien: 🎜rrreee🎜Konfigurationsfehlerprotokoll🎜🎜Nginx schreibt Anwendungs- und allgemeine Serverfehlermeldungen in die Fehlerprotokolldatei. Wenn in Ihrer Webanwendung ein Fehler auftritt, ist das Fehlerprotokoll der erste Ort, an dem Sie mit der Behebung des Problems beginnen. Die error_log
-Direktive aktiviert und legt den Speicherort und den Schweregrad des Fehlerprotokolls fest. Es hat das folgende Format und kann im Kontext http
, server
oder location
festgelegt werden: 🎜rrreee🎜log_level
Parameter Protokollierungsstufe festlegen. Hier sind die Stufen von niedrig bis hoch aufgelistet: 🎜rrreee🎜 Jede Protokollstufe umfasst höhere Stufen. Wenn Sie beispielsweise die Protokollebene auf warn
setzen, protokolliert Nginx auch error
, crit
, alert
und emerg
-Nachricht. Wenn der Parameter log_level
nicht angegeben ist, ist der Standardwert error
. Standardmäßig ist die error_log
-Direktive im Kontext der http
-Direktive in der Hauptdatei nginx.conf definiert: 🎜rrreee🎜/etc/nginx/nginx.conf ist die Wie beim Zugriffsprotokoll wird empfohlen, für jeden Server eine separate Fehlerprotokolldatei einzurichten, die Einstellungen auf höherer Ebene wie den Kontext der http-Anweisung außer Kraft setzt. Um beispielsweise das Fehlerprotokoll für domain.com auf warn
zu setzen, würden Sie Folgendes verwenden: 🎜rrreee🎜 Immer wenn Sie die Konfigurationsdatei ändern, müssen Sie den Nginx-Dienst neu laden, damit die Änderungen wirksam werden. 🎜🎜Speicherort der Protokolldateien 🎜🎜 in den meisten Linux-Distributionen wie Ubuntu, CentOS und Debian. Standardmäßig befinden sich Zugriffs- und Fehlerprotokolle im Verzeichnis /var/log/nginx
. 🎜🎜Nginx-Protokolldateien lesen und verstehen🎜🎜Sie können cat
, less
, grep
, cut
, < verwenden code>awk und andere Befehle öffnen und analysieren Nginx-Protokolldateien. Das Folgende ist die Aufzeichnung der Zugriffsprotokolldatei unter Verwendung des standardmäßigen Nginx-Protokollformats: 🎜192.168.33.1 - - [15/Oct/2019:19:41:46 +0000] "GET / HTTP/1" 200 396 "-" "Mozilla/0 (X11; Linux x86_64) AppleWebKit/536 (KHTML, like Gecko) Chrome/38120 Safari/536"
让我们细分Nginx日志文件记录的每个字段意味着什么:
$remote_addr
– 192.168.33.1
-发出请求的客户端的IP地址。
$remote_user
– -
-HTTP身份验证用户。未设置用户名时,此字段显示 -
。
[$time_local]
– [15/Oct/2019:19:41:46 +0000]
本地服务器时间。
"$request"
– "GET / HTTP/1.1"
-请求类型,路径和协议。
$status
– 200
-服务器响应代码。
$body_bytes_sent
– 396
-服务器响应的大小(以字节为单位)。
"$http_referer"
– "-"
-引荐网址。
"$http_user_agent"
– Mozilla/5.0 ...
-客户端的用户代理(网络浏览器)。
使用 tail
命令实时观看日志文件记录: tail -f access.log
Das obige ist der detaillierte Inhalt vonSo konfigurieren Sie Nginx-Zugriffs- und Fehlerprotokolle. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!