API#
O módulo API
implementa uma interface HTTP RESTful para obter informações básicas
sobre o servidor web em formato JSON, bem como estatísticas sobre conexões
de clientes, zonas de memória compartilhada, consultas DNS, requisições HTTP, cache de resposta HTTP,
sessões do módulo stream, e zonas dos módulos
limit_conn http, limit_conn stream, limit_req, e http upstream.
A interface aceita os métodos HTTP GET
e HEAD
;
uma requisição com outro método causará um erro:
{
"error": "MethodNotAllowed",
"description": "The POST method is not allowed for the requested API element \"/\"."
}
No Angie PRO, esta interface inclui uma seção de configuração dinâmica que permite alterar configurações sem recarregar a configuração ou
reiniciar; atualmente, a configuração de servidores individuais dentro de
upstream está disponível. Habilita a interface HTTP RESTful em O parâmetro path é obrigatório. Similar à diretiva alias, ele define o caminho para substituir aquele especificado em Se especificado em um a parte da URI da requisição que corresponde ao prefixo /stats/ será substituída pelo caminho especificado no parâmetro path: /status/http/server_zones/. Por exemplo, uma requisição para /stats/foo/ acessará o elemento da API Variáveis são permitidas: api /status/$module/server_zones/$name/ e uso dentro de location regex: Aqui o parâmetro path define o caminho completo para o elemento da API;
assim, de uma requisição para E a requisição final será Nota No Angie PRO, você pode separar a API de configuração dinâmica e a API de status imutável que reflete
o estado atual: O parâmetro path também permite controlar o acesso à API: Ou: Habilita ou desabilita a adição do objeto Uma requisição para Por padrão, a saída está desabilitada porque os arquivos de configuração podem conter
informações particularmente sensíveis e confidenciais. O Angie publica estatísticas de uso na seção da API Exemplo de acesso parcial, já mostrado acima: Com configuração incluindo Em resposta à requisição Um conjunto de métricas pode ser solicitado por ramo JSON individual construindo a requisição apropriada. Por exemplo: Nota Por padrão, o módulo usa strings de formato ISO 8601 para datas;
para usar o formato inteiro UNIX epoch em vez disso,
adicione o parâmetro String; versão do servidor web Angie em execução String; nome específico da build quando especificado durante a compilação String; o tempo de build do executável Angie
no formato de data String; o endereço do servidor que aceitou a requisição da API Number; número total de recarregamentos de configuração desde o último início String; tempo do último recarregamento de configuração
no formato de data;
valores string têm resolução de milissegundos Object; seus membros são nomes de caminho absolutos
de todos os arquivos de configuração do Angie
que estão atualmente carregados pela instância do servidor,
e seus valores são representações string do conteúdo dos arquivos,
por exemplo: Aviso O objeto Number; o número total de conexões de cliente aceitas Number; o número total de conexões de cliente descartadas Number; o número atual de conexões de cliente ativas Number; o número atual de conexões de cliente ociosas Estatísticas de uso de zonas de memória compartilhada que utilizam alocação slab, como limit_conn, limit_req, e cache HTTP: A zona de memória compartilhada especificada coletará as seguintes estatísticas: Object; estatísticas de páginas de memória Number; o número de páginas de memória atualmente em uso Number; o número de páginas de memória atualmente livres Object; estatísticas de slots de memória para cada tamanho de slot. O objeto Number; o número de slots de memória atualmente em uso do tamanho especificado Number; o número de slots de memória atualmente livres do tamanho especificado Number; o número total de tentativas de alocar memória do tamanho especificado Number; o número de tentativas malsucedidas de alocar memória do tamanho especificado Exemplo: Para coletar estatísticas do resolver,
a diretiva resolver deve definir o parâmetro A zona de memória compartilhada especificada coletará as seguintes estatísticas: Object; estatísticas de consultas Number; o número de consultas para resolver nomes para endereços
(consultas A e AAAA) Number; o número de consultas para resolver serviços para endereços
(consultas SRV) Number; o número de consultas para resolver endereços para nomes
(consultas PTR) Object; estatísticas de respostas Number; o número de respostas bem-sucedidas Number; o número de consultas que expiraram Number; o número de respostas com código 1 (Erro de Formato) Number; o número de respostas com código 2 (Falha do Servidor) Number; o número de respostas com código 3 (Erro de Nome) Number; o número de respostas com código 4 (Não Implementado) Number; o número de respostas com código 5 (Recusado) Number; o número de consultas completadas com outro código não-zero Object; estatísticas de consultas DNS enviadas Number; o número de consultas do tipo A Number; o número de consultas do tipo AAAA Number; o número de consultas do tipo PTR Number; o número de consultas do tipo SRV Os códigos de resposta são descritos na RFC 1035, seção 4.1.1. Vários tipos de registro DNS são detalhados na RFC 1035,
RFC 2782, e
RFC 3596. Exemplo: Para coletar as métricas do Para agrupar as métricas por um valor personalizado, use a sintaxe alternativa.
Aqui, as métricas são agregadas por $host,
com cada grupo relatado como uma zona independente: A zona de memória compartilhada especificada coletará as seguintes estatísticas: Objeto; estatísticas SSL.
Presente se Número; o número total de handshakes SSL bem-sucedidos Número; o número total de reutilizações de sessão durante o handshake SSL Número; o número total de handshakes SSL que expiraram Número; o número total de handshakes SSL que falharam Objeto; estatísticas de requisições Número; o número total de requisições de clientes Número; o número de requisições de clientes sendo processadas atualmente Número; o número total de requisições de clientes concluídas sem enviar uma resposta Objeto; estatísticas de respostas Número; um número não-zero de respostas com status <code> (100-599) Número; um número não-zero de respostas com outros códigos de status Objeto; estatísticas de dados Número; o número total de bytes recebidos de clientes Número; o número total de bytes enviados para clientes Exemplo: Para coletar as métricas do Para agrupar as métricas por um valor personalizado, use a sintaxe alternativa.
Aqui, as métricas são agregadas por $host,
com cada grupo relatado como uma zona independente: A zona de memória compartilhada especificada coletará as seguintes estatísticas: Objeto; estatísticas de requisições Número; o número total de requisições de clientes Número; o número total de requisições de clientes concluídas sem enviar uma resposta Objeto; estatísticas de respostas Número; um número não-zero de respostas com status <code> (100-599) Número; um número não-zero de respostas com outros códigos de status Objeto; estatísticas de dados Número; o número total de bytes recebidos de clientes Número; o número total de bytes enviados para clientes Exemplo: Para coletar as métricas do Para agrupar as métricas por um valor personalizado, use a sintaxe alternativa.
Aqui, as métricas são agregadas por $host,
com cada grupo relatado como uma zona independente: A zona de memória compartilhada especificada coletará as seguintes estatísticas: Objeto; estatísticas SSL.
Presente se Número; o número total de handshakes SSL bem-sucedidos Número; o número total de reutilizações de sessão durante o handshake SSL Número; o número total de handshakes SSL que expiraram Número; o número total de handshakes SSL que falharam Objeto; estatísticas de conexões Número; o número total de conexões de clientes Número; o número de conexões de clientes sendo processadas atualmente Número; o número total de conexões de clientes
concluídas sem criar uma sessão Número; o número total de conexões de clientes
redirecionadas para outra porta de escuta com diretivas Objeto; estatísticas de sessões Número; o número de sessões concluídas com código 200, que significa conclusão bem-sucedida Número; o número de sessões concluídas com código 400, que acontece quando os dados do cliente não puderam ser analisados, por exemplo, o cabeçalho do protocolo PROXY Número; o número de sessões concluídas com código 403, quando o acesso foi proibido, por exemplo, quando o acesso é limitado para determinados endereços de clientes Número; o número de sessões concluídas com código 500, erro interno do servidor Número; o número de sessões concluídas com código 502, gateway inválido, por exemplo, se um servidor upstream não pôde ser selecionado ou alcançado Número; o número de sessões concluídas com código 503, serviço indisponível, por exemplo, quando o acesso é limitado pelo número de conexões Objeto; estatísticas de dados Número; o número total de bytes recebidos de clientes Número; o número total de bytes enviados para clientes Exemplo: Para cada zona configurada com proxy_cache, os seguintes dados são
armazenados: Número; o tamanho atual do cache Número; limite configurado para o tamanho máximo do cache Booleano; Objeto; estatísticas de respostas válidas em cache (proxy_cache_valid) Número; o número total de respostas lidas do cache Número; o número total de bytes lidos do cache Objeto; estatísticas de respostas expiradas obtidas do cache (proxy_cache_use_stale) Número; o número total de respostas lidas do cache Número; o número total de bytes lidos do cache Objeto; estatísticas de respostas expiradas obtidas do cache enquanto as respostas estavam sendo atualizadas (proxy_cache_use_stale updating) Número; o número total de respostas lidas do cache Número; o número total de bytes lidos do cache Objeto; estatísticas de respostas expiradas e revalidadas obtidas do cache (proxy_cache_revalidate) Número; o número total de respostas lidas do cache Número; o número total de bytes lidos do cache Objeto; estatísticas de respostas não encontradas no cache Número; o número total de respostas correspondentes Número; o número total de bytes lidos do servidor proxy Número; o número total de respostas escritas no cache Número; o número total de bytes escritos no cache Objeto; estatísticas de respostas expiradas não obtidas do cache Número; o número total de respostas correspondentes Número; o número total de bytes lidos do servidor proxy Número; o número total de respostas escritas no cache Número; o número total de bytes escritos no cache Objeto; estatísticas de respostas não consultadas no cache (proxy_cache_bypass) Número; o número total de respostas correspondentes Número; o número total de bytes lidos do servidor proxy Número; o número total de respostas escritas no cache Número; o número total de bytes escritos no cache Adicionado na versão 1.2.0: PRO No Angie PRO, se o cache sharding estiver habilitado com diretivas proxy_cache_path,
fragmentos individuais são expostos como membros de objeto de um objeto Objeto; lista fragmentos individuais como membros Objeto; representa um fragmento individual com seu caminho de cache como nome Número; o tamanho atual do fragmento Número; tamanho máximo do fragmento, se configurado Booleano; Objetos para cada limit_conn em http ou limit_conn em stream configurado nos contextos com os seguintes campos: Número; o número total de conexões aprovadas Número; o número total de conexões aprovadas com chave de comprimento zero, ou chave excedendo 255 bytes Número; o número total de conexões excedendo o limite configurado Número; o número total de conexões rejeitadas devido ao esgotamento do armazenamento da zona Objetos para cada limit_req configurado com os seguintes campos: Número; o número total de requisições aprovadas Número; o número total de requisições aprovadas com chave de comprimento zero, ou chave excedendo 255 bytes Número; o número total de requisições atrasadas Número; o número total de requisições rejeitadas Número; o número total de requisições rejeitadas devido ao esgotamento do armazenamento da zona Adicionado na versão 1.1.0. Para habilitar a coleta das seguintes métricas,
defina a diretiva zone no contexto upstream,
por exemplo: onde <upstream> é o nome de qualquer upstream especificado com a diretiva zone Objeto; contém as métricas dos peers do upstream como subobjetos
cujos nomes são representações canônicas dos endereços dos peers.
Membros de cada subobjeto: String; o parâmetro da diretiva server String; nome do serviço como especificado na diretiva server, se configurado Número; o valor slow_start especificado para o servidor,
expresso em segundos. Ao definir o valor através da
subseção respectiva
da API de configuração dinâmica,
você pode especificar um número de segundos
ou um valor de tempo com precisão de milissegundos. Booleano; Número; peso configurado String; o estado atual do peer e quais requisições são enviadas para ele: Estados adicionais no Angie PRO: Objeto; estatísticas de seleção de peer Número; o número atual de conexões para o peer Número; número total de requisições encaminhadas para o peer String ou número; momento em que o peer foi selecionado pela última vez,
formatado como uma data Número; o número máximo configurado de conexões ativas simultâneas para o peer, se especificado Objeto; estatísticas de respostas Número; um número não-zero de respostas com status <code> (100-599) Número; um número não-zero de respostas com outros códigos de status Objeto; estatísticas de dados Número; o número total de bytes recebidos do peer Número; o número total de bytes enviados para o peer Objeto; estatísticas de saúde Número; o número total de tentativas malsucedidas de comunicação com o peer Número; quantas vezes o peer ficou Número; o tempo total (em milissegundos) quando o peer estava String ou número; momento em que o peer ficou Número; tempo médio (em milissegundos)
para receber os cabeçalhos de resposta do servidor;
veja response_time_factor (PRO) Número; tempo médio (em milissegundos)
para receber a resposta completa do servidor;
veja response_time_factor (PRO) String; id configurado do servidor no grupo upstream Número; o número atual de conexões em cache Objeto; contém o estado atual da lógica de backup ativo,
presente se backup_switch (PRO) estiver configurado para o upstream Número; o nível do grupo ativo
que está sendo usado atualmente para balanceamento de carga de requisições.
Se o grupo ativo for o primário, o valor é 0 Número; tempo de espera restante em milissegundos,
após o qual o balanceador irá verificar novamente por nós saudáveis
em grupos com níveis mais baixos, começando pelo grupo primário,
enquanto grupos com níveis mais altos não são verificados;
não exibido para o grupo primário (nível 0) Alterado na versão 1.2.0: PRO Se o upstream tiver sondas upstream_probe (PRO) configuradas,
o objeto O valor Contadores em Número; total de sondas para este servidor Número; total de sondas falhadas String ou número; momento da última sonda,
formatado como uma data Alterado na versão 1.4.0: PRO Se uma fila de requisições estiver configurada para o upstream,
o objeto upstream também contém um objeto Os valores dos contadores são somados em todos os processos worker: Número; número total de requisições que entraram na fila Número; número atual de requisições na fila Número; número total de requisições removidas da fila
porque o cliente fechou prematuramente a conexão Número; número total de requisições removidas da fila devido a timeout Número; número total de ocorrências de overflow da fila Para habilitar a coleta das seguintes métricas,
defina a diretiva zone no contexto upstream,
por exemplo: Aqui, <upstream> é o nome de um upstream que está
configurado com uma diretiva zone. Objeto; contém as métricas dos peers do upstream como subobjetos
cujos nomes são representações canônicas dos endereços dos peers.
Membros de cada subobjeto: String; endereço definido pela diretiva server String; nome do serviço, se definido pela diretiva server Número; o valor slow_start especificado para o servidor,
expresso em segundos. Ao definir o valor através da
subseção respectiva
da API de configuração dinâmica,
você pode especificar um número
ou um valor de tempo com precisão de milissegundos. Booleano; Número; o peso do peer String; o estado atual do peer e quais requisições são enviadas para ele: Estados adicionais no Angie PRO: Objeto; as métricas de seleção do peer Número; conexões atuais para o peer Número; total de conexões encaminhadas para o peer String ou número; momento em que o peer foi selecionado pela última vez,
formatado como uma data Número;
número máximo
de conexões ativas simultâneas para o peer, se definido Objeto; métricas de transferência de dados Número; total de bytes recebidos do peer Número; total de bytes enviados para o peer Objeto; métricas de saúde do peer Número; total de tentativas falhadas para alcançar o peer Número; vezes que o peer ficou Número; tempo total (em milissegundos) que o peer esteve
String ou número; momento em que o peer ficou Número; tempo médio (em milissegundos)
necessário para estabelecer uma conexão com o peer;
veja a diretiva response_time_factor (PRO). Número; tempo médio (em milissegundos)
para receber o primeiro byte da resposta do peer;
veja a diretiva response_time_factor (PRO). Número; tempo médio (em milissegundos)
para receber a resposta completa do peer;
veja a diretiva response_time_factor (PRO). Objeto; contém o estado atual da lógica de backup ativo,
presente se backup_switch (PRO) estiver configurado para o upstream Número; nível do grupo ativo
atualmente usado para balanceamento de requisições.
Se o grupo ativo for o grupo primário, o valor é 0 Número; tempo de espera restante em milissegundos
após o qual o balanceador de carga irá verificar novamente por nós saudáveis
em grupos com níveis mais baixos, começando pelo grupo primário,
enquanto grupos com níveis mais altos não são verificados;
não exibido para o grupo primário (nível 0) Alterado na versão 1.4.0: PRO No Angie PRO, se o upstream tiver sondas upstream_probe (PRO) configuradas,
o objeto O valor Contadores em Número; total de sondas para este peer Número; total de sondas falhadas String ou número; momento da última sonda,
formatado como uma data Adicionado na versão 1.2.0: PRO A API inclui uma seção Atualmente, a configuração de servidores individuais dentro de upstreams está disponível
na seção Permite configurar peers individuais de upstream,
incluindo excluir peers existentes ou adicionar novos. Parâmetros do caminho URI: Nome do upstream; para ser configurável via O nome do peer dentro do upstream, definido como
Por exemplo, a seguinte configuração: Permite os seguintes nomes de peer: Esta subseção da API permite definir os parâmetros Nota Não há um parâmetro Exemplo: Os parâmetros realmente disponíveis são limitados aos suportados pelo
método de balanceamento de carga atual do upstream.
Então, se o upstream estiver configurado com o método Você não conseguirá adicionar um novo peer que defina Nota Mesmo com um método de balanceamento de carga compatível, o parâmetro Permite configurar servidores individuais dentro de um upstream,
incluindo adicionar novos e excluir os configurados. Parâmetros no caminho URI: Nome do bloco Nome de um servidor específico dentro do Por exemplo, para a seguinte configuração: Estes nomes de servidor são válidos: Esta subseção da API permite definir os parâmetros Nota Não há um parâmetro Exemplo: Apenas os parâmetros que são suportados pelo método de balanceamento de carga atual
do upstream estarão realmente disponíveis.
Por exemplo, se o upstream estiver configurado com o método de balanceamento Então é impossível adicionar um novo servidor com o parâmetro Nota Mesmo com um método de balanceamento compatível, o parâmetro Ao excluir servidores, você pode definir o
argumento Vamos considerar a semântica de todos os métodos HTTP aplicáveis a esta seção,
dada esta configuração upstream: O método HTTP Por exemplo, o
ramo de servidor upstream Você pode obter valores de parâmetros padrão com O método HTTP Por exemplo, para definir o parâmetro Verifique as alterações: O método HTTP Por exemplo, para excluir o parâmetro Verifique as alterações usando A configuração Ao excluir servidores, você pode definir o argumento O método HTTP O método opera da seguinte forma: se as entidades da nova definição
existem na configuração, elas são sobrescritas; caso contrário, são adicionadas. Por exemplo, para alterar a configuração Verifique as alterações: O objeto JSON fornecido com a requisição Os valores Nota Esta exclusão é idêntica ao Por exemplo, para excluir a configuração Verifique as alterações: O parâmetro Diretivas#
api#
location
.location
, mas sobre a árvore da API ao invés do sistema de arquivos.location
de prefixo:location /stats/ {
api /status/http/server_zones/;
}
/status/http/server_zones/foo/
.location ~^/api/([^/]+)/(.*)$ {
api /status/http/$1_zones/$2;
}
/api/location/data/
as seguintes variáveis serão extraídas:$1 = "location"
$2 = "data/"
/status/http/location_zones/data/
.location /config/ {
api /config/;
}
location /status/ {
api /status/;
}
location /status/ {
api /status/;
allow 127.0.0.1;
deny all;
}
location /blog/requests/ {
api /status/http/server_zones/blog/requests/;
auth_basic "blog";
auth_basic_user_file conf/htpasswd;
}
api_config_files#
config_files
,
que lista o conteúdo de todos os arquivos de configuração do Angie
atualmente carregados pela instância do servidor,
à seção da API /status/angie/.
Por exemplo, com esta configuração:location /status/ {
api /status/;
api_config_files on;
}
/status/angie/
retorna aproximadamente o seguinte:{
"version":"1.10.2",
"address":"192.168.16.5",
"generation":1,
"load_time":"2025-08-21T12:58:39.789Z",
"config_files": {
"/etc/angie/angie.conf": "...",
"/etc/angie/mime.types": "..."
}
}
Métricas#
/status/
; você pode
abrir acesso a ela definindo o location
apropriado. Acesso completo:location /status/ {
api /status/;
}
location /stats/ {
api /status/http/server_zones/;
}
Exemplo de configuração#
location /status/
, resolver
, http
em
upstream
, http server
, location
, cache
, limit_conn
em
http
e zonas limit_req
:http {
resolver 127.0.0.53 status_zone=resolver_zone;
proxy_cache_path /var/cache/angie/cache keys_zone=cache_zone:2m;
limit_conn_zone $binary_remote_addr zone=limit_conn_zone:10m;
limit_req_zone $binary_remote_addr zone=limit_req_zone:10m rate=1r/s;
upstream upstream {
zone upstream 256k;
server backend.example.com service=_example._tcp resolve max_conns=5;
keepalive 4;
}
server {
server_name www.example.com;
listen 443 ssl;
status_zone http_server_zone;
proxy_cache cache_zone;
proxy_cache_valid 200 10m;
access_log /var/log/access.log main;
location / {
root /usr/share/angie/html;
status_zone location_zone;
limit_conn limit_conn_zone 1;
limit_req zone=limit_req_zone burst=5;
}
location /status/ {
api /status/;
allow 127.0.0.1;
deny all;
}
}
}
curl https://www.example.com/status/
o Angie retorna:Árvore JSON
{
"angie": {
"version":"1.10.2",
"address":"192.168.16.5",
"generation":1,
"load_time":"2025-08-21T12:58:39.789Z"
},
"connections": {
"accepted":2257,
"dropped":0,
"active":3,
"idle":1
},
"slabs": {
"cache_zone": {
"pages": {
"used":2,
"free":506
},
"slots": {
"64": {
"used":1,
"free":63,
"reqs":1,
"fails":0
},
"512": {
"used":1,
"free":7,
"reqs":1,
"fails":0
}
}
},
"limit_conn_zone": {
"pages": {
"used":2,
"free":2542
},
"slots": {
"64": {
"used":1,
"free":63,
"reqs":74,
"fails":0
},
"128": {
"used":1,
"free":31,
"reqs":1,
"fails":0
}
}
},
"limit_req_zone": {
"pages": {
"used":2,
"free":2542
},
"slots": {
"64": {
"used":1,
"free":63,
"reqs":1,
"fails":0
},
"128": {
"used":2,
"free":30,
"reqs":3,
"fails":0
}
}
}
},
"http": {
"server_zones": {
"http_server_zone": {
"ssl": {
"handshaked":4174,
"reuses":0,
"timedout":0,
"failed":0
},
"requests": {
"total":4327,
"processing":0,
"discarded":8
},
"responses": {
"200":4305,
"302":12,
"404":4
},
"data": {
"received":733955,
"sent":59207757
}
}
},
"location_zones": {
"location_zone": {
"requests": {
"total":4158,
"discarded":0
},
"responses": {
"200":4157,
"304":1
},
"data": {
"received":538200,
"sent":177606236
}
}
},
"caches": {
"cache_zone": {
"size":0,
"cold":false,
"hit": {
"responses":0,
"bytes":0
},
"stale": {
"responses":0,
"bytes":0
},
"updating": {
"responses":0,
"bytes":0
},
"revalidated": {
"responses":0,
"bytes":0
},
"miss": {
"responses":0,
"bytes":0,
"responses_written":0,
"bytes_written":0
},
"expired": {
"responses":0,
"bytes":0,
"responses_written":0,
"bytes_written":0
},
"bypass": {
"responses":0,
"bytes":0,
"responses_written":0,
"bytes_written":0
}
}
},
"limit_conns": {
"limit_conn_zone": {
"passed":73,
"skipped":0,
"rejected":0,
"exhausted":0
}
},
"limit_reqs": {
"limit_req_zone": {
"passed":54816,
"skipped":0,
"delayed":65,
"rejected":26,
"exhausted":0
}
},
"upstreams": {
"upstream": {
"peers": {
"192.168.16.4:80": {
"server":"backend.example.com",
"service":"_example._tcp",
"backup":false,
"weight":5,
"state":"up",
"selected": {
"current":2,
"total":232
},
"max_conns":5,
"responses": {
"200":222,
"302":12
},
"data": {
"sent":543866,
"received":27349934
},
"health": {
"fails":0,
"unavailable":0,
"downtime":0
},
"sid":"<server_id>"
}
},
"keepalive":2
}
}
},
"resolvers": {
"resolver_zone": {
"queries": {
"name":442,
"srv":2,
"addr":0
},
"responses": {
"success":440,
"timedout":1,
"format_error":0,
"server_failure":1,
"not_found":1,
"unimplemented":0,
"refused":1,
"other":0
}
}
}
}
$ curl https://www.example.com/status/angie
$ curl https://www.example.com/status/connections
$ curl https://www.example.com/status/slabs
$ curl https://www.example.com/status/slabs/<zone>/slots
$ curl https://www.example.com/status/slabs/<zone>/slots/64
$ curl https://www.example.com/status/http/
$ curl https://www.example.com/status/http/server_zones
$ curl https://www.example.com/status/http/server_zones/<http_server_zone>
$ curl https://www.example.com/status/http/server_zones/<http_server_zone>/ssl
date=epoch
à string de consulta:$ curl https://www.example.com/status/angie/load_time
"2024-04-01T00:59:59+01:00"
$ curl https://www.example.com/status/angie/load_time?date=epoch
1711929599
Status do servidor#
/status/angie
#{
"version": "1.10.2",
"build_time": "2025-08-21T16:05:43.805Z",
"address": "192.168.16.5",
"generation": 1,
"load_time": "2025-08-21T16:15:43.805Z"
"config_files": {
"/etc/angie/angie.conf": "...",
"/etc/angie/mime.types": "..."
}
}
version
build
build_time
address
generation
load_time
config_files
{
"/etc/angie/angie.conf": "server {\n listen 80;\n # ...\n\n}\n"
}
config_files
está disponível em /status/angie/
apenas se a diretiva
api_config_files
estiver habilitada.Conexões#
/status/connections
#{
"accepted": 2257,
"dropped": 0,
"active": 3,
"idle": 1
}
accepted
dropped
active
idle
Zonas de memória compartilhada com alocação slab#
/status/slabs/<zone>
#limit_conn_zone $binary_remote_addr zone=limit_conn_zone:10m;
limit_req_zone $binary_remote_addr zone=limit_req_zone:10m rate=1r/s;
proxy_cache cache_zone;
proxy_cache_valid 200 10m;
pages
used
free
slots
slots
contém dados para tamanhos de slot de memória (8
, 16
, 32
, etc., até metade do tamanho da página em bytes)used
free
reqs
fails
{
"pages": {
"used": 2,
"free": 506
},
"slots": {
"64": {
"used": 1,
"free": 63,
"reqs": 1,
"fails": 0
}
}
Consultas DNS ao resolver#
/status/resolvers/<zone>
#status_zone
(HTTP ou Stream):resolver 127.0.0.53 status_zone=resolver_zone;
queries
name
srv
addr
responses
success
timedout
format_error
server_failure
not_found
unimplemented
refused
other
sent
a
aaaa
ptr
srv
{
"queries": {
"name": 442,
"srv": 2,
"addr": 0
},
"responses": {
"success": 440,
"timedout": 1,
"format_error": 0,
"server_failure": 1,
"not_found": 1,
"unimplemented": 0,
"refused": 1,
"other": 0
},
"sent": {
"a": 185,
"aaaa": 245,
"srv": 2,
"ptr": 12
}
}
Servidor HTTP e localização#
/status/http/server_zones/<zone>
#server
,
defina a diretiva status_zone no contexto server:server {
...
status_zone server_zone;
}
status_zone $host zone=server_zone:5;
ssl
server
definir listen ssl;
handshaked
reuses
timedout
failed
requests
total
processing
discarded
responses
<code>
xxx
data
received
sent
{
"ssl":{
"handshaked":4174,
"reuses":0,
"timedout":0,
"failed":0
},
"requests":{
"total":4327,
"processing":0,
"discarded":0
},
"responses":{
"200":4305,
"302":6,
"304":12,
"404":4
},
"data":{
"received":733955,
"sent":59207757
}
}
/status/http/location_zones/<zone>
#location
, defina a diretiva status_zone
no contexto de location ou if in location:location / {
root /usr/share/angie/html;
status_zone location_zone;
if ($request_uri ~* "^/condition") {
# ...
status_zone if_location_zone;
}
}
status_zone $host zone=server_zone:5;
requests
total
discarded
responses
<code>
xxx
data
received
sent
{
"requests": {
"total": 4158,
"discarded": 0
},
"responses": {
"200": 4157,
"304": 1
},
"data": {
"received": 538200,
"sent": 177606236
}
}
Servidor Stream#
/status/stream/server_zones/<zone>
#server
,
defina a diretiva status_zone no contexto server:server {
...
status_zone server_zone;
}
status_zone $host zone=server_zone:5;
ssl
server
definir listen ssl;
handshaked
reuses
timedout
failed
connections
total
processing
discarded
passed
pass
sessions
success
invalid
forbidden
internal_error
bad_gateway
service_unavailable
data
received
sent
{
"ssl": {
"handshaked": 24,
"reuses": 0,
"timedout": 0,
"failed": 0
},
"connections": {
"total": 24,
"processing": 1,
"discarded": 0,
"passed": 2
},
"sessions": {
"success": 24,
"invalid": 0,
"forbidden": 0,
"internal_error": 0,
"bad_gateway": 0,
"service_unavailable": 0
},
"data": {
"received": 2762947,
"sent": 53495723
}
}
Caches HTTP#
proxy_cache cache_zone;
proxy_cache_valid 200 10m;
/status/http/caches/<cache>
#{
"name_zone": {
"size": 0,
"cold": false,
"hit": {
"responses": 0,
"bytes": 0
},
"stale": {
"responses": 0,
"bytes": 0
},
"updating": {
"responses": 0,
"bytes": 0
},
"revalidated": {
"responses": 0,
"bytes": 0
},
"miss": {
"responses": 0,
"bytes": 0,
"responses_written": 0,
"bytes_written": 0
},
"expired": {
"responses": 0,
"bytes": 0,
"responses_written": 0,
"bytes_written": 0
},
"bypass": {
"responses": 0,
"bytes": 0,
"responses_written": 0,
"bytes_written": 0
}
}
}
size
max_size
cold
true
enquanto o cache loader carrega dados do discohit
responses
bytes
stale
responses
bytes
updating
responses
bytes
revalidated
responses
bytes
miss
responses
bytes
responses_written
bytes_written
expired
responses
bytes
responses_written
bytes_written
bypass
responses
bytes
responses_written
bytes_written
shards
:shards
<shard>
size
max_size
cold
true
enquanto o cache loader carrega dados do disco{
"name_zone": {
"shards": {
"/path/to/shard1": {
"size": 0,
"cold": false
},
"/path/to/shard2": {
"size": 0,
"cold": false
}
}
}
limit_conn#
limit_conn_zone $binary_remote_addr zone=limit_conn_zone:10m;
/status/http/limit_conns/<zone>
, /status/stream/limit_conns/<zone>
#{
"passed": 73,
"skipped": 0,
"rejected": 0,
"exhausted": 0
}
passed
skipped
rejected
exhausted
limit_req#
limit_req_zone $binary_remote_addr zone=limit_req_zone:10m rate=1r/s;
/status/http/limit_reqs/<zone>
#{
"passed": 54816,
"skipped": 0,
"delayed": 65,
"rejected": 26,
"exhausted": 0
}
passed
skipped
delayed
rejected
exhausted
HTTP upstream#
upstream upstream {
zone upstream 256k;
server backend.example.com service=_example._tcp resolve max_conns=5;
keepalive 4;
}
/status/http/upstreams/<upstream>
#{
"peers": {
"192.168.16.4:80": {
"server": "backend.example.com",
"service": "_example._tcp",
"backup": false,
"weight": 5,
"state": "up",
"selected": {
"current": 2,
"total": 232
},
"max_conns": 5,
"responses": {
"200": 222,
"302": 12
},
"data": {
"sent": 543866,
"received": 27349934
},
"health": {
"fails": 0,
"unavailable": 0,
"downtime": 0
},
"sid": "<server_id>"
}
},
"keepalive": 2
}
peers
server
service
slow_start
(PRO 1.4.0+)backup
true
para servidores de backupweight
state
busy
: indica que o número de requisições para o servidor
atingiu o limite definido por max_conns,
e nenhuma nova requisição é enviada para ele;down
: desabilitado manualmente, nenhuma requisição é enviada;recovering
: recuperando após uma falha
de acordo com slow_start,
mais e mais requisições são enviadas ao longo do tempo;unavailable
: atingiu o limite max_fails,
apenas requisições de teste do cliente são enviadas
em intervalos definidos por fail_timeout;up
: operacional, requisições são enviadas normalmente;checking
: configurado como essential
e sendo verificado,
apenas requisições de sonda são enviadas;draining
: similar a down
,
mas requisições de sessões previamente vinculadas
(via sticky) ainda são enviadas;unhealthy
: não operacional,
apenas requisições de sonda são enviadas.selected
current
total
last
max_conns
responses
<code>
xxx
data
received
sent
health
fails
unavailable
unavailable
devido ao atingimento do limite max_failsdowntime
unavailable
para seleçãodownstart
unavailable
,
formatado como uma dataheader_time
(PRO 1.3.0+)response_time
(PRO 1.3.0+)sid
keepalive
backup_switch
active
timeout
health/probes
(PRO)#health
também possui um subobjeto probes
que armazena os contadores de sonda de saúde do servidor,
enquanto o state
, além dos valores listados na tabela acima,
também pode ser checking
e unhealthy
:{
"192.168.16.4:80": {
"state": "unhealthy",
"...": "...",
"health": {
"...": "...",
"probes": {
"count": 10,
"fails": 10,
"last": "2025-08-21T09:56:07Z"
}
}
}
}
checking
de state
não é contado como downtime
e significa que o servidor, que possui uma sonda configurada como essential
,
ainda não foi verificado;
o valor unhealthy
significa que o servidor está com mau funcionamento.
Ambos os estados também implicam que o servidor não está incluído no balanceamento de carga.
Para detalhes das sondas de saúde, veja upstream_probe.probes
:count
fails
last
queue
(PRO)#queue
aninhado
com contadores da fila de requisições:{
"queue": {
"queued": 20112,
"waiting": 1011,
"dropped": 6031,
"timedout": 560,
"overflows": 13
}
}
queued
waiting
dropped
timedout
overflows
Stream upstream#
upstream upstream {
zone upstream 256k;
server backend.example.com service=_example._tcp resolve max_conns=5;
keepalive 4;
}
/status/stream/upstreams/<upstream>
#{
"peers": {
"192.168.16.4:1935": {
"server": "backend.example.com",
"service": "_example._tcp",
"backup": false,
"weight": 5,
"state": "up",
"selected": {
"current": 2,
"total": 232
},
"max_conns": 5,
"data": {
"sent": 543866,
"received": 27349934
},
"health": {
"fails": 0,
"unavailable": 0,
"downtime": 0
}
}
}
}
peers
server
service
slow_start
(PRO 1.4.0+)backup
true
para servidor de backupweight
state
busy
: indica que o número de requisições para o servidor
atingiu o limite definido por max_conns,
e nenhuma nova requisição é enviadadown
: desabilitado manualmente, nenhuma requisição é enviadarecovering
: recuperando após uma falha
de acordo com slow_start,
mais e mais requisições são enviadas ao longo do tempounavailable
: atingiu o limite max_fails,
apenas requisições de teste do cliente são enviadas
em intervalos definidos por fail_timeout;up
: operacional, requisições são enviadas normalmentechecking
: configurado como essential
e sendo verificado,
apenas requisições de sonda são enviadasdraining
: similar a down
,
mas requisições de sessões previamente vinculadas
(via sticky) ainda são enviadasunhealthy
: não operacional,
apenas requisições de sonda são enviadasselected
current
total
last
max_conns
data
received
sent
health
fails
unavailable
unavailable
devido a
atingir o max_failsdowntime
unavailable
para seleçãodownstart
unavailable
pela última vez,
formatado como uma dataconnect_time
(PRO 1.4.0+)first_byte_time
(PRO 1.4.0+)last_byte_time
(PRO 1.4.0+)backup_switch
(PRO 1.10.0+)active
timeout
health
também tem um subobjeto probes
que armazena os contadores de sonda de saúde do peer,
enquanto o state
do peer também pode ser checking
e unhealthy
,
além dos valores listados na tabela acima:{
"192.168.16.4:80": {
"state": "unhealthy",
"...": "...",
"health": {
"...": "...",
"probes": {
"count": 2,
"fails": 2,
"last": "2025-08-21T11:03:54Z"
}
}
}
}
checking
de state
significa que o peer, que tem uma sonda configurada como essential
,
ainda não foi verificado;
o valor unhealthy
significa que o peer está com mau funcionamento.
Ambos os estados também implicam que o peer não está incluído no balanceamento de carga.
Para detalhes das sondas de saúde, veja upstream_probe.probes
:count
fails
last
API de Configuração Dinâmica (somente PRO)#
/config
que permite atualizações dinâmicas
na configuração do Angie em JSON
com requisições HTTP PUT
, PATCH
e DELETE
.
Todas as atualizações são atômicas; as novas configurações são aplicadas como um todo,
ou nenhuma é aplicada.
Em caso de erro, o Angie reporta o motivo.Subseções de
/config
#/config
para os módulos HTTP e stream; o número de configurações
elegíveis para configuração dinâmica está aumentando constantemente./config/http/upstreams/<upstream>/servers/<name>
#<upstream>
/config
, deve
ter uma diretiva zone configurada, definindo uma zona
de memória compartilhada.<name>
<service>@<host>
, onde:<service>@
é um nome de serviço opcional, usado para
resolução de registros SRV.<host>
é o nome de domínio do serviço (se resolve
estiver presente) ou seu IP; uma porta opcional pode ser definida aqui.upstream backend {
server backend.example.com service=_http._tcp resolve;
server 127.0.0.1;
zone backend 1m;
}
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/_http._tcp@backend.example.com/
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/127.0.0.1:80/
weight
, max_conns
,
max_fails
, fail_timeout
, backup
, down
e
sid
, conforme descrito em server.drain
(PRO) separado aqui;
para habilitar drain
,
defina down
para o valor string drain
:$ curl -X PUT -d \"drain\" \
http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com/down
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com?defaults=on
{
"weight": 1,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": 10,
"backup": true,
"down": false,
"sid": ""
}
random
:upstream backend {
zone backend 256k;
server backend.example.com resolve max_conns=5;
random;
}
backup
:$ curl -X PUT -d '{ "backup": true }' \
http://127.0.0.1/config/http/upstreams/backend/servers/backend1.example.com
{
"error": "FormatError",
"description": "The \"backup\" field is unknown."
}
backup
só pode ser definido ao adicionar um novo peer./config/stream/upstreams/<upstream>/servers/<name>
#<upstream>
upstream
;
para configurá-lo via /config
,
deve conter a diretiva zone
que define uma zona de memória compartilhada.<name>
<upstream>
especificado;
especificado no formato <service>@<host>
, onde:<service>@
— parte opcional
que especifica o nome do serviço para resolver registros SRV.<host>
— nome de domínio do serviço (quando resolve está presente)
ou endereço IP; a porta também pode ser especificada.upstream backend {
server backend.example.com:8080 service=_example._tcp resolve;
server 127.0.0.1:12345;
zone backend 1m;
}
$ curl http://127.0.0.1/config/stream/upstreams/backend/servers/_example._tcp@backend.example.com:8080/
$ curl http://127.0.0.1/config/stream/upstreams/backend/servers/127.0.0.1:12345/
weight
,
max_conns
, max_fails
, fail_timeout
, backup
e
down
descritos na seção server.drain
separado (PRO);
para habilitar o modo drain
,
defina o parâmetro down
para o valor string drain
:$ curl -X PUT -d \"drain\" \
http://127.0.0.1/config/stream/upstreams/backend/servers/backend.example.com/down
curl http://127.0.0.1/config/stream/upstreams/backend/servers/backend.example.com?defaults=on
{
"weight": 1,
"max_conns": 0,
"max_fails": 1,
"fail_timeout": 10,
"backup": true,
"down": false,
}
random
:upstream backend {
zone backend 256k;
server backend.example.com resolve max_conns=5;
random;
}
backup
:$ curl -X PUT -d '{ "backup": true }' \
http://127.0.0.1/config/stream/upstreams/backend/servers/backend1.example.com
{
"error": "FormatError",
"description": "The \"backup\" field is unknown."
}
backup
só pode ser definido ao adicionar um novo servidor.connection_drop=<value>
(PRO) para sobrescrever as
configurações proxy_connection_drop:$ curl -X DELETE \
http://127.0.0.1/config/stream/upstreams/backend/servers/backend1.example.com?connection_drop=off
$ curl -X DELETE \
http://127.0.0.1/config/stream/upstreams/backend/servers/backend2.example.com?connection_drop=on
$ curl -X DELETE \
http://127.0.0.1/config/stream/upstreams/backend/servers/backend3.example.com?connection_drop=1000
Métodos HTTP#
http {
# ...
upstream backend {
zone upstream 256k;
server backend.example.com resolve max_conns=5;
# ...
}
server {
# ...
location /config/ {
api /config/;
allow 127.0.0.1;
deny all;
}
}
}
GET#
GET
consulta uma entidade em qualquer caminho existente dentro de
/config
, assim como faz para outras seções da API./config/http/upstreams/backend/servers/
habilita estas consultas:$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com/max_conns
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com
$ curl http://127.0.0.1/config/http/upstreams/backend/servers
$ # ...
$ curl http://127.0.0.1/config
defaults=on
:$ curl http://127.0.0.1/config/http/upstreams/backend/servers?defaults=on
{
"backend.example.com": {
"weight": 1,
"max_conns": 5,
"max_fails": 1,
"fail_timeout": 10,
"backup": false,
"down": false,
"sid": ""
}
}
PUT#
PUT
cria uma nova entidade JSON no caminho especificado
ou substitui inteiramente uma existente.max_fails
, não especificado anteriormente,
do servidor backend.example.com
dentro do upstream backend
:$ curl -X PUT -d '2' \
http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com/max_fails
{
"success": "Updated",
"description": "Existing configuration API entity \"/config/http/upstreams/backend/servers/backend.example.com/max_fails\" was updated with replacing."
}
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com
{
"max_conns": 5,
"max_fails": 2
}
DELETE#
DELETE
exclui configurações previamente definidas no caminho especificado;
ao fazer isso, retorna aos valores padrão se houver algum.max_fails
definido anteriormente
do servidor backend.example.com
dentro do upstream backend
:$ curl -X DELETE \
http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com/max_fails
{
"success": "Reset",
"description": "Configuration API entity \"/config/http/upstreams/backend/servers/backend.example.com/max_fails\" was reset to default."
}
defaults=on
:$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com?defaults=on
{
"weight": 1,
"max_conns": 5,
"max_fails": 1,
"fail_timeout": 10,
"backup": false,
"down": false,
"sid": ""
}
max_fails
voltou ao seu valor padrão.connection_drop=<value>
(PRO) para sobrescrever as configurações proxy_connection_drop, grpc_connection_drop,
fastcgi_connection_drop, scgi_connection_drop, e
uwsgi_connection_drop:$ curl -X DELETE \
http://127.0.0.1/config/http/upstreams/backend/servers/backend1.example.com?connection_drop=off
$ curl -X DELETE \
http://127.0.0.1/config/http/upstreams/backend/servers/backend2.example.com?connection_drop=on
$ curl -X DELETE \
http://127.0.0.1/config/http/upstreams/backend/servers/backend3.example.com?connection_drop=1000
PATCH#
PATCH
cria uma nova entidade no caminho especificado
ou substitui parcialmente ou complementa uma existente
(RFC 7386)
fornecendo uma definição JSON em seu payload.down
do
servidor backend.example.com
dentro do upstream backend
,
deixando o resto intacto:$ curl -X PATCH -d '{ "down": true }' \
http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com
{
"success": "Updated",
"description": "Existing configuration API entity \"/config/http/upstreams/backend/servers/backend.example.com\" was updated with merging."
}
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com
{
"max_conns": 5,
"down": true
}
PATCH
foi mesclado com o
existente em vez de sobrescrevê-lo, como seria o caso com PUT
.null
são um caso especial; eles são usados para excluir itens
específicos de configuração durante tal mesclagem.DELETE
;
em particular, ela restaura os valores padrão.down
adicionada anteriormente
e simultaneamente atualizar max_conns
:$ curl -X PATCH -d '{ "down": null, "max_conns": 6 }' \
http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com
{
"success": "Updated",
"description": "Existing configuration API entity \"/config/http/upstreams/backend/servers/backend.example.com\" was updated with merging."
}
$ curl http://127.0.0.1/config/http/upstreams/backend/servers/backend.example.com
{
"max_conns": 6
}
down
, para o qual um null
foi fornecido, foi excluído;
max_conns
foi atualizado.