Como configurar o acesso personalizado e os formatos de log de erros no nginx

Como configurar o acesso personalizado e os formatos de log de erros no nginx

Nginx http O servidor possui uma instalação de madeira fenomenal que é altamente personalizável. Neste artigo, explicaremos como configurar seus próprios formatos para acesso e logs de erro para nginx no Linux.

O objetivo deste guia é ajudá -lo a entender como os logs são gerados, de modo a configurar formatos de log personalizados para fins de depuração, solução de problemas ou análise do que se desenrola em seu servidor da Web, bem como aplicativos da Web (como solicitações de rastreamento).

Leia também: 4 Boas ferramentas de monitoramento e gerenciamento de log de código aberto para Linux

Este artigo é feito de três seções que o esclarecerão sobre a configuração Logs de acesso/erro e como habilitar o log no Nginx condicional.

Configurando logs de acesso no nginx

Sob Nginx, Todas log de acesso em um formato especificado usando o ngx_http_log_module módulo.

O arquivo de log padrão é log/acesso.registro (geralmente /var/log/nginx/access_log nos sistemas Linux) e o formato padrão para o registro é normalmente o formato combinado ou principal (isso pode variar de uma distro para outra).

O access_log Diretiva (aplicável no HTTP, servidor, localização, se no local e limite, exceto contexto) é usado para definir o arquivo de log e o log_format A diretiva (aplicável apenas no contexto HTTP) é usada para definir o formato de log. O formato de log é descrito por variáveis ​​comuns e variáveis ​​que geradas apenas no momento em que um log é escrito.

A sintaxe para configurar um formato de log é:

log_format format_name 'set_of_variables_to_define_format'; 

e a sintaxe para configurar o log de acesso é:

access_log/path/to/log_file format_name; #simplest forma ou access_log/path/to/log_file [formato [buffer = size] [gzip [= nível]] [flush = time] [if = condition]]; 

A seguir, é apresentado um trecho do arquivo de configuração NGINX padrão /etc/nginx/nginx.conf sobre CENTOS 7.

/etc/nginx/nginx.conf
HTTP #Main LOG FORMAT LOG_FORMAT MAIN '$ REMOTE_ADDR - $ REMOTE_USER [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" "$ http_user_agent" "$ http_x_formed_ford_ford_ford_fore"; access_log/var/log/nginx/acesso.registro;  

Este formato de log gera a seguinte entrada de log.

127.0.0.1 - DBMANAGER [20/NOV/2017: 18: 52: 17 +0000] "Get/http/1.1 "401 188"-"" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0 " 

A seguir, é apresentado outro formato útil de registro que usamos para rastrear solicitações em nossos aplicativos da Web usando algumas das variáveis ​​padrão, ele o mais importante possui o ID da solicitação e os detalhes do local do cliente (Código de País, País, Região e Cidade).

/etc/nginx/nginx.conf
log_format custom '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent" " 

Você pode usá -lo assim:

access_log/var/log/nginx/acesso.Log Custom; 

Isso produzirá uma entrada de log que aparece assim.

153.78.107.192 - - [21/novembro/2017: 08: 45: 45 +0000] "post/ngx_pagespeed_beacon?url = https%3a%2f%2fwww.exemplo.com%2fads%2ffresh-oranges-509260795 http/2.0 "204 0" https: // www.Suasell.com/anúncios/laranges-1509260795 "" Mozilla/5.0 (x11; Ubuntu; Linux x86_64; rv: 47.0) Gecko/20100101 Firefox/47.0 ""-"A02B2DEA9CF06344A25611C1D7AD72DB UGANDA UG Kampala Kampala 

Você pode especificar vários logs usando o access_log Diretivas no mesmo nível, aqui estamos usando mais de um arquivo de log no contexto HTTP.

/etc/nginx/nginx.conf
Formato de log padrão Log_Format Main '$ remote_addr - $ remote_user [$ time_local] "$ request" "$ status $ body_bytes_sent" $ http_referer "" Rastreamento de solicitação usando formato personalizado log_format personalizado '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referer" "$ http_user_agent" "$ HTTP_X_DWARD_FORD_FORTEND_FORTENST_USTENSTENSTENSTENSTENSTENT_METRATET_MOND_METRATET_METRO_METRO_METRO_METRO_MO_METRO_MO_METRO_FATT_MEMENTE" $ geoip_region_name $ geoip_city '; ## Isso usa o formato de log padrão access_log/var/log/nginx/acesso.registro; ## Isso usa o nosso formato de log personalizado access_log/var/log/nginx/Custom_log Custom;  

A seguir, são apresentados exemplos de configurações de registro mais avançadas, que são úteis para formatos de log que contêm variáveis ​​relacionadas à compressão e para criar arquivos de log compactados:

access_log/var/log/nginx/custom_log buffer personalizado 32k; access_log/path/to/log.GZIP GZIP GZIP GZIP = 5M; 

Configurando logs de erro no nginx

Em caso Nginx experimenta qualquer falha, ele registra informações sobre elas no registro de erros. Essas questões se enquadram em diferentes níveis de gravidade: depurar, informações, perceber, avisar, erro (Este é o nível padrão e funciona globalmente), Crit, alerta, ou emerg.

O arquivo de log padrão é log/erro.registro, Mas está normalmente localizado em /var/log/nginx/ nas distribuições Linux. O error_log A diretiva é usada para especificar o arquivo de log e pode ser usada na principal, http, correio, fluxo, servidor, contexto de localização (nessa ordem).

Você também deve observar que:

  • As configurações no contexto principal são sempre herdadas por níveis mais baixos na ordem acima.
  • e as configurações nos níveis mais baixos substituem as configurações herdadas dos níveis mais altos.

Você pode configurar o log de erros usando a seguinte sintaxe:

error_log/path/to/log_file log_level; 

Por exemplo:

error_log/var/log/nginx/error_log warn; 

Isso instruirá o nginx a registrar todas as mensagens do tipo avisar e nível de log mais grave Crit, alerta, e emerg mensagens.

No próximo exemplo, mensagens de Crit, alerta, e emerg Os níveis serão registrados.

error_log/var/www/exemplo1.com/log/error_log crit; 

Considere a configuração abaixo, aqui, definimos o registro de erros em diferentes níveis (no contexto HTTP e do servidor). Em caso de erro, a mensagem é gravada para apenas um log de erros, o mais próximo do nível em que o erro apareceu.

/etc/nginx/nginx.conf
http log_format compressão '$ remote_addr - $ remote_user [$ time_local] "" $ request "$ status $ body_bytes_sent" "$ http_referere" "$ http_user_agent" "gzip_ratio"'; error_log/var/log/nginx/error_log crit; servidor ouça 80; server_name Exemplo1.com; #Isso registra mensagens de erros por exemplo1.com apenas error_log/var/log/nginx/exemplo1.error_log warn;… servidor ouça 80; server_name Exemplo2.com; #Isso registra mensagens de erros por exemplo2.com apenas error_log/var/log/nginx/exemplo1.error_log;… .  

Se você usar mais de um error_log Diretivas como na configuração abaixo (mesmo nível), as mensagens são gravadas para todos os logs especificados.

/etc/nginx/nginx.conf
servidor ouça 80; server_name Exemplo1.com; error_log/var/www/exemplo1.com/log/error_log warn; error_log/var/log/nginx/exemplo1.error_log crit;… 

Configurando o registro condicional no nginx

Em alguns casos, podemos querer que o nginx execute o registro condicional de mensagens. Nem toda mensagem deve ser registrada pelo Nginx, portanto, podemos ignorar entradas de log insignificantes ou menos importantes de nossos registros de acesso para instâncias específicas.

Podemos usar o ngx_http_map_module módulo que cria variáveis ​​cujos valores dependem dos valores de outras variáveis. Os parâmetros dentro de um bloco de mapa (que devem existir apenas no conteúdo HTTP) especificam um mapeamento entre a fonte e os valores resultantes.

Para esse tipo de configuração, uma solicitação não será registrada se a condição avaliar "0" ou uma corda vazia. Este exemplo exclui solicitações com códigos de status HTTP 2xx e 3xx.

/etc/nginx/nginx.conf
http map $ status $ condição ~^[23] 0; padrão 1;  servidor Access_log/Path/to/Access.registro personalizado if = $ condição;  

Aqui está outro exemplo útil para depurar um aplicativo da web em uma fase de desenvolvimento. Isso ignorará todas as mensagens e apenas informações de depuração de log.

/etc/nginx/nginx.conf
 http map $ info $ depurável default 0; Debug 1;  servidor … access_log/var/log/nginx/testapp_debug_access_log debug if = $ degable; #Logs Outras solicitações access_log/var/log/nginx/testapp_access.Log Main;… .  

Você pode descobrir mais informações, incluindo o log no syslog aqui.

É tudo por agora! Neste guia, explicamos como configurar o formato de registro personalizado para acesso e logs de erro no nginx. Use o formulário de feedback abaixo para fazer perguntas ou compartilhar você pensamentos sobre este artigo.