Maison >Opération et maintenance >Nginx >Comment configurer les journaux d'accès et d'erreurs Nginx

Comment configurer les journaux d'accès et d'erreurs Nginx

WBOY
WBOYavant
2023-05-16 08:10:051894parcourir

Nginx est un serveur HTTP et proxy inverse open source et hautes performances chargé de gérer la charge de certains des plus grands sites sur Internet. L'une des tâches les plus courantes que vous effectuerez lors de la gestion d'un serveur Web NGINX consiste à vérifier les fichiers journaux.

Savoir comment configurer et lire les journaux est très utile lors du dépannage des problèmes de serveur ou d'application, car ils fournissent des informations de débogage détaillées.

Nginx utilise deux types de journaux pour enregistrer ses événements : les journaux d'accès et les journaux d'erreurs. La journalisation d'accès enregistre des informations sur les demandes des clients et la journalisation des erreurs enregistre des informations sur les problèmes de serveur et d'application.

Configurer le journal d'accès Nginx

Nginx générera un nouvel enregistrement dans le journal d'accès chaque fois qu'une demande client est traitée. Chaque enregistrement d'événement contient un horodatage et contient diverses informations sur le client et la ressource demandée. Les journaux d'accès peuvent montrer l'emplacement du visiteur, les pages visitées par le visiteur, etc.

La directive log_format permet de définir le format de journalisation. La directive access_log active et définit l'emplacement et le format des fichiers journaux. 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 目录中。

读取和理解Nginx日志文件

你可以使用 cat , less , grep , cut , awk

La syntaxe la plus basique de la directive access_log est la suivante : 🎜
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"
🎜où log_file est le chemin complet du fichier journal, et log_format est le format utilisé pour le fichier journal. La journalisation des accès peut être activée dans le contexte d'une directive http , server ou location. 🎜🎜Par défaut, la directive http dans le fichier de configuration principal de Nginx configure le format du journal d'accès global. 🎜rrreee🎜/etc/nginx/nginx.conf🎜🎜Pour une meilleure maintenabilité, il est recommandé de configurer un fichier journal d'accès distinct pour chaque serveur. La directive access_log définie dans la directive server écrasera la directive access_log définie dans la directive http. 🎜rrreee🎜/etc/nginx/conf.d/domain.com.conf🎜🎜Si aucun format de journal n'est spécifié, Nginx utilisera le format combiné prédéfini comme suit : 🎜rrreee🎜Pour modifier le format de journalisation, remplacez le paramètre par défaut ou définissez un nouveau décor. Par exemple, définissez un nouveau format de journalisation appelé main qui étendra le format combiné en ajoutant la valeur de l'en-tête X-Forwarded-For, ajoutez la directive de définition suivante dans http ou server : 🎜rrreee🎜Pour utiliser le nouveau format de journal, spécifiez son nom après le fichier journal, comme suit : 🎜rrreee🎜 Bien que l'accès les journaux fournissent des informations très utiles. Mais cela occupe de l'espace disque et peut affecter les performances du serveur. Si votre serveur manque de ressources et que votre site est occupé, vous souhaiterez peut-être désactiver les journaux d'accès. Pour ce faire, définissez la valeur de la directive access_log sur off . Théoriquement, vous n'aurez pas cette situation, Nginx supprimera automatiquement les fichiers journaux précédents : 🎜rrreee🎜Journal des erreurs de configuration🎜🎜Nginx écrit les messages d'erreur généraux de l'application et du serveur dans le fichier journal des erreurs. Si vous rencontrez une erreur dans votre application Web, le journal des erreurs est le premier endroit où commencer pour résoudre le problème. La directive error_log active et définit l'emplacement et le niveau de gravité du journal des erreurs. Il prend le format suivant et peut être défini dans le contexte http , server ou location : 🎜rrreee🎜log_level paramètre Définir le niveau de journalisation. Voici les niveaux répertoriés de faible à élevé : 🎜rrreee🎜 Chaque niveau de journal comprend des niveaux plus élevés. Par exemple, si vous définissez le niveau de journalisation sur warn , Nginx enregistrera également error , crit , alert et Message émergent. Lorsque le paramètre log_level n'est pas spécifié, la valeur par défaut est error. Par défaut, la directive error_log est définie dans le contexte de la directive http dans le fichier nginx.conf principal : 🎜rrreee🎜/etc/nginx/nginx.conf est le comme pour le journal d'accès, il est recommandé de configurer un fichier journal d'erreurs distinct pour chaque serveur, qui remplacera les paramètres de niveau supérieur tels que le contexte de la directive http. Par exemple, pour définir le journal des erreurs de domain.com sur warn , vous utiliserez : 🎜rrreee🎜 Chaque fois que vous modifiez le fichier de configuration, vous devez recharger le service Nginx pour que les modifications prennent effet. 🎜🎜Emplacement des fichiers journaux 🎜🎜 dans la plupart des distributions Linux telles que Ubuntu, CentOS et Debian. Par défaut, les journaux d'accès et d'erreurs se trouvent dans le répertoire /var/log/nginx. 🎜🎜Lire et comprendre les fichiers journaux Nginx🎜🎜Vous pouvez utiliser cat, less, grep, cut, awk et d'autres commandes ouvrent et analysent les fichiers journaux nginx. Voici l'enregistrement du fichier journal d'accès utilisant le format de journal Nginx par défaut : 🎜
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

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer