Módulo core#
O módulo fornece funcionalidade essencial e diretivas de configuração
necessárias para a operação básica do servidor,
e lida com tarefas críticas como gerenciar processos worker,
configurar modelos orientados a eventos,
e processar conexões e requisições recebidas.
Inclui diretivas essenciais para configurar o processo principal, log
de erros, e controlar o comportamento do servidor em baixo nível. Quando Nota Não há necessidade de habilitar Se accept_mutex estiver habilitado,
esta diretiva especifica o tempo máximo
que um processo worker aguardará
para continuar aceitando novas conexões
enquanto outro processo worker já está lidando com novas conexões. Determina se o Angie deve executar como daemon.
Isso é usado principalmente durante o desenvolvimento. Habilita logs de depuração para conexões específicas de clientes.
Outras conexões usarão o nível de logging
definido pela diretiva error_log.
Você pode especificar conexões por endereço IPv4 ou IPv6, rede, ou hostname.
Para conexões usando sockets de domínio UNIX,
use o parâmetro Nota Para que esta diretiva funcione,
o Angie deve ser compilado com log de depuração habilitado. Esta diretiva é usada para depuração. Quando ocorre um erro interno,
como vazamento de socket durante reinicializações de processos worker,
habilitar Por padrão,
o Angie remove todas as variáveis de ambiente herdadas de seu processo pai
exceto a variável Essas variáveis são então: herdadas durante uma
atualização ao vivo de um arquivo executável usadas pelo módulo Perl disponíveis para processos worker Note que controlar bibliotecas do sistema desta forma nem sempre pode ser efetivo,
pois bibliotecas frequentemente verificam variáveis apenas durante a inicialização,
que ocorre antes desta diretiva fazer efeito.
A variável Exemplo: Nota A variável de ambiente Padrão main, http, mail, stream, server, location Configura o logging,
permitindo que múltiplos logs sejam especificados no mesmo nível de configuração.
Se um arquivo de log não for explicitamente definido no nível de configuração O primeiro parâmetro especifica o arquivo para armazenar o log.
O valor especial O segundo parâmetro define o nível de logging, que pode ser um dos seguintes:
Configuração Níveis Capturados Se este parâmetro for omitido,
Os parâmetros opcionais qualquer outro nome — um campo do contexto da mensagem, como um dos campos
mostrados no formato JSON abaixo. Por padrão, o padrão match é comparado como uma substring. Use o prefixo
Com Vários parâmetros O parâmetro opcional O limite é aplicado separadamente a cada diretiva Quando um destino começa a descartar mensagens, o Angie grava nele um aviso
"too many log messages, limiting" do mesmo nível no lugar da primeira mensagem
descartada; o aviso pode se repetir durante uma sobrecarga contínua. O aviso
não carrega detalhes de contexto nem tags e precisa passar pelos parâmetros
A limitação de taxa não se aplica quando o nível de logging Nota Para que o nível de logging O parâmetro opcional No formato padrão, cada entrada no log de erros tem o seguinte formato: Onde: Com Onde: Fornece o contexto do arquivo de configuração para diretivas
que afetam o processamento de conexões. Inclui outro arquivo, ou arquivos que correspondem à mask especificada,
na configuração.
Os arquivos incluídos devem conter diretivas e blocos sintaticamente corretos. Exemplo: Carrega um módulo dinâmico do arquivo especificado.
Se um caminho relativo for fornecido, ele é interpretado com base na
Exemplo: Se um módulo dinâmico foi compilado para uma compilação diferente do Angie, o carregamento falha com um
erro como: "module "..." was built for "..." but you are running "Angie"". Padrão main O Angie usa um mecanismo de bloqueio para implementar accept_mutex
e serializar o acesso à memória compartilhada.
Na maioria dos sistemas, os bloqueios são gerenciados usando operações atômicas,
tornando esta diretiva desnecessária.
Em certos sistemas, no entanto, um mecanismo alternativo de arquivo de bloqueio é usado.
Esta diretiva define um prefixo para nomes de arquivos de bloqueio. Determina se os processos worker são iniciados.
Esta diretiva é destinada aos desenvolvedores do Angie. Um processo worker aceitará todas as novas conexões simultaneamente. Um processo worker aceitará uma nova conexão por vez. Nota Esta diretiva é ignorada
se o método de processamento de conexão kqueue for usado,
pois ele fornece o número de novas conexões prontas para serem aceitas. Habilita ou desabilita a "compilação just-in-time" (PCRE JIT)
para expressões regulares conhecidas no momento da análise da configuração. O PCRE JIT pode acelerar significativamente o processamento de expressões regulares. Nota JIT está disponível nas bibliotecas PCRE a partir da versão 8.20,
desde que sejam compiladas com a opção de configuração Padrão main Especifica o arquivo que armazenará o ID do processo principal do Angie.
O arquivo é criado atomicamente, o que garante que seu conteúdo esteja sempre correto.
A configuração Nota Se a configuração do arquivo for modificada durante a reconfiguração
mas apontar para um link simbólico do arquivo PID anterior,
o arquivo não será recriado. Faz com que o OpenSSL use por padrão o engine com o nome especificado para
todos os algoritmos implementados pelo engine. O engine também pode ser
definido no arquivo de configuração do OpenSSL. Se habilitado, objetos SSL (certificados SSL, chaves secretas, certificados CA confiáveis,
listas CRL) são herdados através de recarregamentos de configuração. Objetos SSL carregados de arquivos são herdados se seu tempo de modificação e índice
de arquivo não mudaram desde o carregamento de configuração anterior. Chaves secretas
especificadas com o prefixo Objetos SSL carregados de variáveis não podem ser herdados. Exemplo: Padrão main Define o nome e parâmetros de um pool de threads
usado para leitura e envio multi-threaded de arquivos
sem bloquear processos worker. O parâmetro Se todas as threads no pool estiverem ocupadas executando tarefas, novas tarefas aguardam em uma fila.
O parâmetro Reduz a resolução do timer nos processos worker,
reduzindo assim o número de chamadas do sistema Exemplo: A implementação interna do intervalo depende do método usado: Especifica o método a ser usado para processamento de conexão.
Normalmente não há necessidade de especificá-lo explicitamente,
porque o Angie usará por padrão o método mais eficiente. Padrão main Define as credenciais de usuário e grupo usadas pelos processos worker
(veja também parâmetros de compilação).
Se grupo for omitido, um grupo cujo nome é igual ao do usuário é usado. Ao usar aio com o método de processamento de conexão epoll,
define o número máximo de operações de I/O assíncronas pendentes
para um único processo worker. Define o número máximo de conexões simultâneas que podem ser abertas por um processo worker. Deve-se ter em mente que este número inclui todas as conexões
(por exemplo, conexões com servidores proxy, entre outras),
não apenas conexões com clientes.
Outra consideração é que o número real de conexões simultâneas
não pode exceder o limite atual no número máximo de arquivos abertos,
que pode ser alterado por worker_rlimit_nofile. Vincula processos worker aos conjuntos de CPUs.
Cada conjunto de CPU é representado por uma máscara de bits das CPUs permitidas.
Deve haver um conjunto separado definido para cada um dos processos worker.
Por padrão, os processos worker não são vinculados a nenhuma CPU específica. Por exemplo: Esta configuração vincula cada processo worker a uma CPU separada. Alternativamente: Isso vincula o primeiro processo worker à CPU0 e CPU2,
e o segundo processo worker à CPU1 e CPU3.
Esta configuração é adequada para hyper-threading. O valor especial O parâmetro opcional mask pode ser usado para limitar as CPUs
disponíveis para vinculação automática: Nota A diretiva está disponível apenas no FreeBSD e Linux. Define a prioridade de agendamento para processos worker como é feito
pelo comando nice: um number negativo
significa prioridade mais alta.
O intervalo permitido normalmente varia de -20 a 20. Exemplo: Define o número de processos worker. O valor ideal depende de muitos fatores incluindo (mas não limitado a)
o número de núcleos de CPU, o número de discos rígidos que armazenam dados,
e padrão de carga.
Quando há dúvida, defini-lo para o número de núcleos de CPU disponíveis
seria um bom começo (o valor " Altera o limite no maior tamanho de um arquivo core ( Altera o limite no número máximo de arquivos abertos ( Configura um timeout para um desligamento gracioso de processos worker.
Quando o tempo especificado expira,
o Angie tentará fechar todas as conexões atualmente abertas
para facilitar o desligamento. O desligamento gracioso é iniciado enviando um sinal QUIT para o processo principal, que instrui os processos worker
a parar de aceitar novas conexões e permite que as conexões existentes sejam concluídas.
Os processos worker continuam a lidar com requisições ativas até que terminem,
e então desligam graciosamente. Se as conexões permanecerem abertas
por mais tempo que Define o diretório de trabalho atual para um processo worker.
É usado principalmente ao escrever um arquivo core,
caso em que um processo worker deve ter permissão de escrita para o
diretório especificado.Exemplo de configuração#
user www www;
worker_processes 2;
error_log /var/log/error.log info;
events {
use kqueue; worker_connections 2048;
}
Diretivas#
accept_mutex#
accept_mutex está habilitado,
processos worker aceitarão novas conexões alternadamente.
Sem essa configuração, todos os processos worker são notificados de novas conexões,
o que pode levar ao uso ineficiente de recursos do sistema
se o volume de novas conexões for baixo.accept_mutex em sistemas
que suportam a flag EPOLLEXCLUSIVE
ou ao usar a diretiva reuseport.accept_mutex_delay#
daemon#
debug_connection#
unix: para habilitar logs de depuração.events {
debug_connection 127.0.0.1;
debug_connection localhost;
debug_connection 192.0.2.0/24;
debug_connection ::1;
debug_connection 2001:0db8::/32;
debug_connection unix:;
# ...
}
debug_points#
debug_points criará um arquivo core (abort)
ou parará o processo (stop) para análise posterior com um depurador do sistema.env#
TZ.
Esta diretiva permite preservar algumas variáveis herdadas,
modificar seus valores, ou criar novas variáveis de ambiente.TZ é sempre herdada
e acessível ao módulo Perl
a menos que explicitamente configurado de outra forma.env MALLOC_OPTIONS;
env PERL5LIB=/data/site/modules;
env OPENSSL_ALLOW_PROXY_CERTS=1;
ANGIE é usada internamente pelo Angie
e não deve ser definida diretamente pelo usuário.error_log#
error_log file [level] [[filter=part:match] ...] [rate=rate] [format=format];error_log logs/error.log error;
(o caminho depende da opção de compilação --error-log-path)main,
o arquivo padrão será usado.stderr seleciona o fluxo de erro padrão.
Para configurar logging para syslog,
use o prefixo "syslog:".
Para fazer log para um buffer de memória cíclico,
use o prefixo "memory:" seguido do tamanho do buffer;
isso é tipicamente usado para depuração.debug, info, notice, warn, error,
crit, alert, ou emerg.
Esses níveis são listados em ordem de severidade crescente.
Definir um nível de log capturará mensagens de severidade igual e superior:debugdebug, info, notice, warn, error,
crit, alert, emerginfoinfo, notice, warn, error,
crit, alert, emergnoticenotice, warn, error,
crit, alert, emergwarnwarn, error, crit, alert, emergerrorerror, crit, alert, emergcritcrit, alert, emergalertalert, emergemergemergerror é usado como nível de logging padrão.filter=part:match restringem quais mensagens
são gravadas no log, de modo que um único destino possa coletar apenas os eventos
de interesse. Cada parâmetro testa uma parte (part) da mensagem em relação ao
padrão match, onde part é um dos seguintes:logline — com format=default, a mensagem junto com
qualquer erro de sistema e detalhes de contexto, mas sem o prefixo de
data e hora, nível, processo, thread e conexão; não corresponde a entradas
com format=json;message — com format=default, o texto da mensagem sem
erro de sistema nem detalhes de contexto; com format=json, o
fragmento serializado e escapado que contém o membro message, e não
o seu valor bruto;tag — uma tag anexada à mensagem, incluindo as tags adicionadas pela
diretiva error_log_user_tag e por suas contrapartes
stream e mail;sourcefile — o arquivo-fonte que emitiu a mensagem; disponível
somente quando o Angie é compilado com o log de depuração
habilitado;= para exigir correspondência exata, ou ~ para usar uma
expressão regular, o que requer uma compilação com a biblioteca PCRE.format=json, uma correspondência exata em message deve
cobrir todo o fragmento serializado, incluindo a sintaxe JSON e o escape.filter= podem ser especificados para uma mesma
diretiva; uma mensagem só é gravada quando corresponde a todos eles. No entanto,
cada campo de contexto pode ser testado por apenas um parâmetro filter=
por diretiva: um segundo parâmetro no mesmo campo nunca corresponde, portanto
nenhuma mensagem é gravada no destino.rate=rate limita a taxa máxima de mensagens
gravadas no log, em mensagens por segundo; o valor pode terminar
com o sufixo m/s (por exemplo, rate=2000m/s). Por padrão,
é usado rate=1000 (1000 mensagens por segundo); defina rate=0
para desabilitar o limite.error_log
e de forma independente em cada processo worker. Uma enxurrada de mensagens de
baixa severidade (por exemplo, info) não suprime as de severidade mais
alta, como error, pois níveis mais severos têm direito a uma rajada
proporcionalmente maior; o inverso não é verdadeiro. As mensagens excedentes
são descartadas. Isso limita o log, em vez de silenciá-lo: sob sobrecarga
contínua, as mensagens continuam sendo gravadas aproximadamente na taxa
configurada.filter= do destino, portanto um destino filtrado por tag ou por
um campo de contexto nunca o recebe. O aviso também não é gravado no destino
com o nível mais detalhado entre as diretivas error_log em vigor
(o primeiro declarado, se vários compartilham esse nível), de modo que, com um
único destino, nenhum aviso aparece.debug está
em vigor para uma mensagem — seja porque o próprio arquivo de log usa o nível
debug, seja porque os logs de depuração estão habilitados para a
conexão por meio de debug_connection.debug funcione,
o Angie deve ser compilado com log de depuração habilitado.format=format seleciona o formato usado nas
entradas do log. O padrão, format=default, produz o formato tradicional
de texto simples descrito abaixo; format=json grava cada entrada como
um único objeto JSON em uma linha.timestamp [level] PID#TID: *connection_id message
timestamp — data e hora locais do eventolevel — nível de logging do eventoPID#TID — identificadores de processo e thread*connection_id — número serial da conexão, compartilhado por todas as requisições da mesma conexão (se aplicável)message — texto da mensagem de erro ou eventoformat=json, cada entrada é gravada como um único objeto JSON,
mostrado aqui formatado para facilitar a leitura; no arquivo de log ele
ocupa uma única linha:{
"time": "2026-02-14T09:23:10.874Z",
"level": "error",
"pid": 22738,
"tid": 22738,
"connection": 7,
"message": "limiting requests, excess: 1.000 by zone \"one\"",
"http": {
"client": "127.0.0.1",
"request": {
"server": "localhost",
"request_line": "GET /debug HTTP/1.1",
"host": "localhost"
}
},
"tags": [
"http"
]
}
time — data e hora do evento em UTC, no formato ISO 8601 com
o sufixo Z; os milissegundos são incluídos, exceto quando são zerolevel — nível de logging do eventopid e tid — identificadores de processo e threadconnection — número da conexão (o mesmo valor mostrado como
*connection_id no formato de texto simples), presente quando a
entrada está associada a uma conexãomessage — texto da mensagem de erro ou eventoerror — presente quando a mensagem está associada a um erro de
sistema; um objeto com os campos code e messagehttp, stream ou mail — um objeto com os detalhes de
contexto da entrada, identificado pelo nome do módulo de onde a entrada se
originou (um objeto genérico context é usado para detalhes de
contexto fora desses módulos); o objeto só aparece em entradas que carregam
tais detalhes e são registradas em um nível diferente de debug.
O objeto de cada módulo tem seu próprio conjunto de campos; por exemplo, em
http, um objeto aninhado request contém request_line,
a linha da requisição, além de outros detalhes da requisiçãotags — lista de tags anexadas à entrada, presente quando pelo menos
uma tag se aplica; inclui as tags adicionadas automaticamente pelos módulos e
pelas diretivas error_log_user_tagtruncated — true, presente somente quando a entrada precisou
ser truncada para caber no buffer do log de errosevents#
include#
include mime.types;
include vhosts/*.conf;
load_module#
--prefix opção de compilação. Para verificar o caminho:$ sudo angie -V
load_module modules/ngx_mail_module.so;
lock_file#
lock_file arquivo;lock_file logs/angie.lock;
(o caminho depende da --lock-path opção de compilação)master_process#
multi_accept#
onoffpcre_jit#
--enable-jit.
Quando o Angie é compilado com a biblioteca PCRE (--with-pcre=),
o suporte JIT é habilitado usando a opção --with-pcre-jit.pid#
pid arquivo | off;pid logs/angie.pid;
(o caminho depende da --pid-path opção de compilação)off desabilita a criação deste arquivo.ssl_engine#
ssl_object_cache_inheritable#
engine: ou store: nunca são
herdadas, enquanto certificados e chaves especificados com o prefixo
data: são sempre herdados. Chaves secretas protegidas por senha não são
armazenadas em cache e, portanto, nunca são herdadas.ssl_object_cache_inheritable on;
http {
server {
ssl_certificate example.com.crt;
ssl_certificate_key example.com.key;
}
}
thread_pool#
thread_pool nome threads=número [max_queue=número];thread_pool default threads=32 max_queue=65536;threads define o número de threads no pool.max_queue limita o número de tarefas
permitidas para aguardar na fila.
Por padrão, até 65536 tarefas podem estar na fila.
Quando a fila transborda, a tarefa é completada com um erro.timer_resolution#
gettimeofday().
Por padrão, gettimeofday() é chamado cada vez que um evento do kernel é recebido.
Com resolução reduzida, gettimeofday() é chamado apenas uma vez por intervalo especificado.timer_resolution 100ms;
use#
user#
user usuário [grupo];user <parâmetro de compilação --user> <parâmetro de compilação --group>;worker_aio_requests#
worker_connections#
worker_cpu_affinity#
worker_processes 4;
worker_cpu_affinity 0001 0010 0100 1000;
worker_processes 2;
worker_cpu_affinity 0101 1010;
auto
permite vincular processos worker automaticamente às CPUs disponíveis:worker_processes auto;
worker_cpu_affinity auto;
worker_cpu_affinity auto 01010101;
worker_priority#
worker_priority -10;
worker_processes#
auto" tentará detectá-lo automaticamente).worker_rlimit_core#
RLIMIT_CORE)
para processos worker.
Usado para aumentar o limite sem reiniciar o processo principal.worker_rlimit_nofile#
RLIMIT_NOFILE)
para processos worker.
Usado para aumentar o limite sem reiniciar o processo principal.worker_shutdown_timeout#
worker_shutdown_timeout, o Angie fechará forçadamente essas
conexões para completar o desligamento.
Além disso, conexões keep-alive de cliente são fechadas apenas se estiverem
inativas por pelo menos o tempo especificado por lingering_timeout.working_directory#