API#
El módulo API
implementa una interfaz RESTful HTTP para obtener información básica sobre el servidor web en formato JSON, así como estadísticas sobre conexiones de clientes, zonas de memoria compartida, consultas DNS, peticiones HTTP, caché de respuestas HTTP, sesiones del módulo stream y zonas de los módulos limit_conn http, limit_conn stream, limit_req y http upstream.
La interfaz admite métodos HTTP GET
y HEAD
; una petición con otro método provocará un error:
{
"error": "MethodNotAllowed",
"description": "The POST method is not allowed for the requested API element \"/\"."
}
En Angie PRO, esta interfaz incluye una sección de configuración dinámica que permite cambiar ajustes sin recargar la configuración ni reiniciar; actualmente, la configuración de servidores individuales dentro de upstream está disponible. Habilita la interfaz RESTful HTTP en El parámetro path es obligatorio. Similar a la directiva alias, establece la ruta para reemplazar la que se especifica en Si se especifica en un prefijo la parte del URI de la petición que coincide con el prefijo /stats/ será reemplazada con la ruta especificada en el parámetro path: /status/http/server_zones/. Por ejemplo, una petición a /stats/foo/ accederá al elemento de la API Se permiten variables: api /status/$module/server_zones/$name/ y uso dentro de location con expresiones regulares: Aquí el parámetro path define la ruta completa al elemento de la API; así, de una petición a Y la petición final será Nota En Angie PRO, puede separar la API de configuración dinámica y la API de estado inmutable que refleja el estado actual: El parámetro path también permite controlar el acceso a la API: O: Habilita o deshabilita la adición del objeto Una petición a Por defecto, la salida está deshabilitada porque los archivos de configuración pueden contener información particularmente sensible y confidencial. Angie publica estadísticas de uso en la sección de API Ejemplo de acceso parcial, ya mostrado: Con una configuración que incluye En respuesta a la solicitud Se puede solicitar un conjunto de métricas por rama JSON individual construyendo la solicitud adecuada. Por ejemplo: Nota Por defecto, el módulo utiliza cadenas de formato ISO 8601 para fechas;
para usar el formato de época UNIX entero en su lugar,
añade el parámetro Cadena; versión del servidor web Angie en ejecución Cadena; nombre de construcción particular cuando se especifica durante la compilación Cadena; tiempo de compilación del ejecutable Angie
en el formato date Cadena; la dirección del servidor que aceptó la petición API Número; número total de recargas de configuración desde el último inicio Cadena; tiempo de la última recarga de configuración
en el formato date;
las cadenas tienen resolución en milisegundos Objeto; sus miembros son rutas absolutas
de todos los archivos de configuración de Angie
que están actualmente cargados por la instancia del servidor,
y sus valores son representaciones en cadena del contenido de los archivos,
por ejemplo: Advertencia El objeto Número; el total de conexiones de clientes aceptadas Número; el total de conexiones de clientes descartadas Número; el total actual de conexiones de clientes activas Número; el total actual de conexiones de clientes ociosas Estadísticas de uso de zonas de memoria compartida que utilizan asignación slab
<https://en.wikipedia.org/wiki/Slab_allocation>_, como limit_conn, limit_req, y HTTP cache: La zona de memoria compartida especificada recogerá las siguientes estadísticas: Objeto; estadísticas de páginas de memoria Número; el número de páginas de memoria actualmente utilizadas Número; el número de páginas de memoria actualmente libres Objeto; estadísticas de slots de memoria para cada tamaño de slot. El objeto Número; el número de slots de memoria actualmente utilizados del tamaño especificado Número; el número de slots de memoria actualmente libres del tamaño especificado Número; el número total de intentos de asignar memoria del tamaño especificado Número; el número de intentos fallidos de asignar memoria del tamaño especificado Ejemplo: Para recopilar estadísticas del resolvedor,
la directiva resolver debe establecer el parámetro La zona de memoria compartida especificada recopilará las siguientes estadísticas: Objeto; estadísticas de consultas Número; la cantidad de consultas para resolver nombres a direcciones
(consultas A y AAAA) Número; la cantidad de consultas para resolver servicios a direcciones
(consultas SRV) Número; la cantidad de consultas para resolver direcciones a nombres
(consultas PTR) Objeto; estadísticas de respuestas Número; la cantidad de respuestas exitosas Número; la cantidad de consultas agotadas por tiempo Número; la cantidad de respuestas con código 1 (Formato error) Número; la cantidad de respuestas con código 2 (Fallo del servidor) Número; la cantidad de respuestas con código 3 (Name Error) Número; la cantidad de respuestas con código 4 (Not Implemented) Número; la cantidad de respuestas con código 5 (Rechazado) Número; la cantidad de consultas completadas con otro código distinto de cero Objeto; estadísticas de consultas DNS enviadas Número; la cantidad de consultas de tipo A Número; la cantidad de consultas de tipo AAAA Número; la cantidad de consultas de tipo PTR Número; la cantidad de consultas de tipo SRV Los códigos de respuesta se describen en RFC 1035
<https://datatracker.ietf.org/doc/html/rfc1035.html>, sección
<https://datatracker.ietf.org/doc/html/rfc1035.html#section-4.1.1>. Los diversos tipos de registros DNS se detallan en RFC 1035
<https://datatracker.ietf.org/doc/html/rfc1035.html>,
RFC 2782
<https://datatracker.ietf.org/doc/html/rfc2782.html>, y
RFC 3596
<https://datatracker.ietf.org/doc/html/rfc3596.html>. Ejemplo: Para recopilar las métricas de Para agrupar las métricas por un valor personalizado, utilice la sintaxis alternativa.
Aquí, las métricas se agregan por $host,
con cada grupo reportado como una zona independiente: La zona de memoria compartida especificada recopilará las siguientes estadísticas: Objeto; estadísticas SSL.
Presente si Número; el número total de handshakes SSL exitosos Número; el número total de reutilizaciones de sesión durante el handshake SSL Número; el número total de handshakes SSL que agotaron el tiempo de espera Número; el número total de handshakes SSL fallidos Objeto; estadísticas de solicitudes Número; el número total de solicitudes de clientes Número; el número de solicitudes de clientes que se están procesando actualmente Número; el número total de solicitudes de clientes completadas sin enviar una respuesta Objeto; estadísticas de respuestas Número; un número distinto de cero de respuestas con estado <code> (100-599) Número; un número distinto de cero de respuestas con otros códigos de estado Objeto; estadísticas de datos Número; el total de bytes recibidos de los clientes Número; el total de bytes enviados a los clientes Ejemplo: Para recopilar las métricas de Para agrupar las métricas por un valor personalizado, utilice la sintaxis alternativa.
Aquí, las métricas se agrupan por $host, reportándose cada grupo como una zona independiente: La zona de memoria compartida especificada recopilará las siguientes estadísticas: Objeto; estadísticas de solicitudes Número; el total de solicitudes de clientes Número; el total de solicitudes de clientes completadas sin enviar una respuesta Objeto; estadísticas de respuestas Número; un número distinto de cero de respuestas con estado <code> (100-599) Número; un número distinto de cero de respuestas con otros códigos de estado Objeto; estadísticas de datos Número; el total de bytes recibidos de los clientes Número; el total de bytes enviados a los clientes Ejemplo: Para recopilar las métricas de Para agrupar las métricas por un valor personalizado, utilice la sintaxis alternativa.
Aquí, las métricas se agrupan por $host,
reportándose cada grupo como una zona independiente: La zona de memoria compartida especificada recopilará las siguientes estadísticas: Objeto; estadísticas SSL.
Presente si Número; el número total de handshakes SSL exitosos Número; el número total de reutilizaciones de sesión durante el handshake SSL Número; el número total de handshakes SSL que agotaron el tiempo de espera Número; el número total de handshakes SSL fallidos Objeto; estadísticas de conexiones Número; el número total de conexiones de clientes Número; el número de conexiones de clientes que se están procesando actualmente Número; el número total de conexiones de clientes completadas sin crear una sesión Número; el número total de conexiones de clientes redirigidas a otro puerto con directivas Objeto; estadísticas de sesiones Número; el número de sesiones completadas con código 200, lo que indica finalización exitosa Número; el número de sesiones completadas con código 400, cuando los datos del cliente no pudieron analizarse (por ejemplo, cabecera PROXY) Número; el número de sesiones completadas con código 403, cuando se restringió el acceso Número; el número de sesiones completadas con código 500, error interno Número; el número de sesiones completadas con código 502, bad gateway Número; el número de sesiones completadas con código 503, servicio no disponible Objeto; estadísticas de datos Número; el total de bytes recibidos de los clientes Número; el total de bytes enviados a los clientes Ejemplo: Para cada zona configurada con proxy_cache, se almacenan los siguientes datos: Número; el tamaño actual de la caché Número; límite configurado para el tamaño máximo de la caché Booleano; Objeto; estadísticas de respuestas válidas en caché (proxy_cache_valid) Número; el número total de respuestas leídas desde la caché Número; el número total de bytes leídos desde la caché Objeto; estadísticas de respuestas caducadas tomadas de la caché (proxy_cache_use_stale) Número; el número total de respuestas leídas desde la caché Número; el número total de bytes leídos desde la caché Objeto; estadísticas de respuestas caducadas tomadas de la caché mientras se actualizaban las respuestas (proxy_cache_use_stale updating) Número; el número total de respuestas leídas desde la caché Número; el número total de bytes leídos desde la caché Objeto; estadísticas de respuestas caducadas y revalidadas tomadas de la caché (proxy_cache_revalidate) Número; el número total de respuestas leídas desde la caché Número; el número total de bytes leídos desde la caché Objeto; estadísticas de respuestas no encontradas en la caché Número; el número total de respuestas correspondientes Número; el número total de bytes leídos desde el servidor proxy Número; el número total de respuestas escritas en la caché Número; el número total de bytes escritos en la caché Objeto; estadísticas de respuestas caducadas no tomadas de la caché Número; el número total de respuestas correspondientes Número; el número total de bytes leídos desde el servidor proxy Número; el número total de respuestas escritas en la caché Número; el número total de bytes escritos en la caché Objeto; estadísticas de respuestas no buscadas en la caché (proxy_cache_bypass) Número; el número total de respuestas correspondientes Número; el número total de bytes leídos desde el servidor proxy Número; el número total de respuestas escritas en la caché Número; el número total de bytes escritos en la caché Added in version 1.2.0: PRO En Angie PRO, si el caché está particionado con directivas proxy_cache_path,
los fragmentos individuales se exponen como miembros de un objeto Objeto; enumera fragmentos individuales como miembros Objeto; representa un fragmento individual con su ruta de caché como nombre Número; el tamaño actual del fragmento Número; tamaño máximo del fragmento, si está configurado Booleano; Objetos para cada limit_conn en http o limit_conn en stream configurados con los siguientes campos: Número; el total de conexiones aceptadas Número; el total de conexiones aceptadas con clave de longitud cero, o clave que excede 255 bytes Número; el total de conexiones que exceden el límite configurado Número; el total de conexiones rechazadas por agotamiento del almacenamiento de la zona Objetos para cada limit_req configurado con los siguientes campos: Número; el total de solicitudes aceptadas Número; el total de solicitudes aceptadas con clave de longitud cero, o clave que excede 255 bytes Número; el total de solicitudes retrasadas Número; el total de solicitudes rechazadas Número; el total de solicitudes rechazadas por agotamiento del almacenamiento de la zona Added in version 1.1.0. Para habilitar la recopilación de las siguientes métricas,
establezca la directiva zone en el contexto upstream,
por ejemplo: donde <upstream> es el nombre de cualquier upstream especificado con la directiva zone Objeto; contiene las métricas de los peers del upstream como subobjetos
cuyas nombres son representaciones canónicas de las direcciones de los peers.
Miembros de cada subobjeto: Cadena; el parámetro de la directiva server Cadena; nombre del servicio tal como se especifica en la directiva server, si está configurado Número; el valor especificado slow_start para el servidor,
expresado en segundos. Al establecer el valor vía la subsección respectiva
/config/http/upstreams/<upstream>/servers/<name>
de la API de configuración dinámica,
puede especificar un número de segundos
o un valor de tiempo con precisión de milisegundos. Booleano; Número; el peso configurado de la directiva server Cadena; el estado actual del peer y qué solicitudes se le envían: Estados adicionales en Angie PRO: Objeto; las métricas de selección del peer Número; el número actual de conexiones al peer Número; el número total de conexiones reenviadas al peer Cadena o número; momento en que el peer fue seleccionado por última vez,
formateado como una fecha Número; el máximo configurado de conexiones simultáneas al peer, si está especificado Objeto; métricas de transferencia de datos Número; el total de bytes recibidos del peer Número; el total de bytes enviados al peer Objeto; métricas de salud Número; el total de intentos fallidos de comunicarse con el peer Número; cuántas veces el peer se volvió Número; el tiempo total (en milisegundos) que el peer estuvo Cadena o número; momento en que el peer se volvió Número; tiempo promedio (en milisegundos) para establecer una conexión con el peer; ver la directiva response_time_factor (PRO). Número; tiempo promedio (en milisegundos) para recibir el primer byte de la respuesta del peer; ver la directiva response_time_factor (PRO). Número; tiempo promedio (en milisegundos) para recibir la respuesta completa del peer; ver la directiva response_time_factor (PRO). Objeto; contiene el estado actual de la lógica de respaldo activa, presente si backup_switch (PRO) está configurado para el upstream Número; nivel del grupo activo actualmente utilizado para equilibrar la carga de solicitudes. Si el grupo activo es el primario, el valor es 0 Número; tiempo de espera restante en milisegundos, después del cual el equilibrador de carga volverá a comprobar nodos sanos en grupos con niveles inferiores, a partir del grupo primario; no se muestra para el grupo primario (nivel 0) Distinto en la versión 1.4.0: PRO En Angie PRO, si el upstream tiene sondas upstream_probe (PRO) configuradas,
el objeto El valor Contadores en Número; sondas totales para este peer Número; sondas fallidas totales Cadena o número; hora de la última sonda, formateada como una fecha Distinto en la versión 1.4.0: PRO Si se configura una cola de solicitudes para el upstream,
el objeto upstream también contiene un objeto anidado Los valores de los contadores se suman en todos los procesos de trabajo: Número; número total de solicitudes que entraron en la cola Número; número actual de solicitudes en la cola Número; número total de solicitudes eliminadas de la cola porque el cliente cerró la conexión prematuramente Número; número total de solicitudes eliminadas de la cola por tiempo de espera Número; número total de ocurrencias de desbordamiento de la cola Para habilitar la recopilación de las siguientes métricas,
establezca la directiva zone en el contexto upstream,
por ejemplo: Aquí, <upstream> es el nombre de un upstream que está
configurado con una directiva zone. Objeto; contiene las métricas de los peers del upstream como subobjetos
cuyas nombres son representaciones canónicas de las direcciones de los peers.
Miembros de cada subobjeto: Cadena; dirección establecida por la directiva server Cadena; nombre del servicio, si está establecido por la directiva server Número; el valor especificado slow_start para el servidor,
expresado en segundos. Al establecer el valor a través de la
subsección correspondiente
de la API de configuración dinámica,
puede especificar un número
o un valor de tiempo con precisión de milisegundos. Booleano; Número; el weight del peer Cadena; el estado actual del peer y qué solicitudes se envían: Estados adicionales en Angie PRO: Objeto; métricas de selección del peer Número; conexiones actuales al peer Número; conexiones totales reenviadas al peer Cadena o número; momento en que el peer fue seleccionado por última vez,
formateado como una fecha Número; el máximo configurado de conexiones activas simultáneas al peer, si está establecido Objeto; métricas de transferencia de datos Número; bytes totales recibidos del peer Número; bytes totales enviados al peer Objeto; métricas de salud Número; total de intentos fallidos de alcanzar al peer Número; cuántas veces el peer se volvió Número; tiempo total (en milisegundos) que el peer estuvo Cadena o número; momento en que el peer se volvió Número; tiempo promedio (en milisegundos) para establecer una conexión con el peer; ver la directiva response_time_factor (PRO). Número; tiempo promedio (en milisegundos) para recibir el primer byte de la respuesta del peer; ver la directiva response_time_factor (PRO). Número; tiempo promedio (en milisegundos) para recibir la respuesta completa del peer; ver la directiva response_time_factor (PRO). Objeto; contiene el estado actual de la lógica de respaldo activo, presente si backup_switch (PRO) está configurado para el upstream Número; nivel del grupo activo actualmente utilizado para el balanceo de la carga. Si el grupo activo es el primario, el valor es 0 Número; tiempo de espera restante en milisegundos, tras el cual el equilibrador de carga volverá a comprobar nodos sanos en grupos con niveles inferiores, empezando por el grupo primario; no se muestra para el grupo primario (nivel 0) Distinto en la versión 1.4.0: PRO En Angie PRO, si el upstream tiene sondas de upstream upstream_probe (PRO) configuradas,
el objeto El valor Contadores en Número; total de sondas para este peer Número; total de sondas fallidas Cadena o número; hora de la última sonda,
formateada como una fecha Added in version 1.2.0: PRO La API incluye una sección Actualmente, la configuración de servidores individuales dentro de upstreams está disponible
en la sección Permite configurar peers individuales de upstream,
incluyendo eliminar peers existentes o añadir nuevos. Parámetros de la ruta URI: Nombre del upstream; para configurarlo vía El nombre del peer dentro del upstream, definido como
Por ejemplo, la siguiente configuración: Permite los siguientes nombres de peer: Esta subsección de la API permite establecer los parámetros Nota No existe un parámetro separado Ejemplo: Actualmente disponibles son los parámetros soportados por el método de balanceo actual del upstream. Por ejemplo, si el upstream está configurado con el método de balanceo No podrás añadir un nuevo peer que defina Nota Incluso con un método de balanceo compatible, el parámetro Permite configurar servidores individuales dentro de un upstream,
incluyendo añadir nuevos y eliminar los ya configurados. Parámetros en la ruta URI: Nombre del bloque Nombre de un servidor específico dentro del Por ejemplo, para la siguiente configuración: Estos nombres de servidor son válidos: Esta subsección de la API permite establecer los parámetros Nota No existe un parámetro separado Ejemplo: Solo aquellos parámetros que son compatibles con el método de balanceo de carga actual del upstream <s_u_upstream> estarán realmente disponibles. Por ejemplo, si el upstream está configurado con el método de balanceo Entonces es imposible añadir un nuevo servidor con el parámetro Nota Incluso con un método de balanceo compatible, el parámetro Al eliminar servidores, puede establecer el argumento Consideremos la semántica de todos los métodos HTTP aplicables a esta sección, dada esta configuración de upstream: El método HTTP Por ejemplo, la rama del servidor upstream Puedes obtener valores predeterminados con El método HTTP Por ejemplo, para establecer el parámetro Verifica los cambios: El método HTTP Por ejemplo, para eliminar el parámetro Verifica los cambios usando La configuración Al eliminar servidores, puedes establecer el argumento El método HTTP El método opera de la siguiente manera: si las entidades de la nueva definición existen en la configuración, se sobrescriben; de lo contrario, se añaden. Por ejemplo, para cambiar la configuración Verifica los cambios: La API devuelve el objeto JSON proporcionado con la solicitud Los valores nulos son un caso especial; se utilizan para eliminar elementos concretos de configuración durante dicha fusión. Nota Esta eliminación es idéntica a Por ejemplo, para eliminar la configuración Verifica los cambios: El parámetro Directivas#
api#
location
.location
, pero sobre el árbol de la API en lugar del sistema de archivos.location
:location /stats/ {
api /status/http/server_zones/;
}
/status/http/server_zones/foo/
.location ~^/api/([^/]+)/(.*)$ {
api /status/http/$1_zones/$2;
}
/api/location/data/
se extraerán las siguientes variables:$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 el contenido de todos los archivos de configuración de Angie actualmente cargados por la instancia del servidor, a la sección de la API /status/angie/. Por ejemplo, con esta configuración:location /status/ {
api /status/;
api_config_files on;
}
/status/angie/
devuelve aproximadamente lo siguiente:{
"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/
; puedes abrir el acceso a ella configurando la location
adecuada. Acceso completo:location /status/ {
api /status/;
}
location /stats/ {
api /status/http/server_zones/;
}
Ejemplo de configuración#
location /status/
, resolver
, http
en
upstream
, http server
, location
, cache
, limit_conn
en
http
y 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/
Angie devuelve:JSON tree
{
"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
a la cadena 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
Estado del 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á disponible en /status/angie/
solo si la directiva
api_config_files
está habilitada.Conexiones#
/status/connections
#{
"accepted": 2257,
"dropped": 0,
"active": 3,
"idle": 1
}
accepted
dropped
active
idle
Memorias compartidas con asignación 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
contiene datos para tamaños de slots de memoria (8
, 16
, 32
, etc., hasta la mitad del tamaño de la página en bytes)used
free
reqs
fails
{
"pages": {
"used": 2,
"free": 506
},
"slots": {
"64": {
"used": 1,
"free": 63,
"reqs": 1,
"fails": 0
}
}
Consultas DNS al resolvedor#
/status/resolvers/<zone>
#status_zone
(HTTP o 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 y ubicación#
/status/http/server_zones/<zone>
#server
,
establezca la directiva status_zone en el contexto server:server {
...
status_zone server_zone;
}
status_zone $host zone=server_zone:5;
ssl
server
establece 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
, configure la directiva status_zone
en el contexto de location o 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
}
}
Stream server#
/status/stream/server_zones/<zone>
#server
,
configure la directiva status_zone en el contexto server:server {
...
status_zone server_zone;
}
status_zone $host zone=server_zone:5;
ssl
server
establece 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
}
}
HTTP caches#
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
mientras el cargador de caché carga datos desde el 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
mientras el cargador de caché carga datos desde el 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 respaldoweight
state
busy
: indica que el número de solicitudes al servidor ha alcanzado el límite establecido por max_conns, y no se envían nuevas solicitudes;down
: deshabilitado manualmente, no se envían solicitudes;recovering
: se recupera tras un fallo según slow_start, cada vez se envían más solicitudes;unavailable
: alcanzó el límite max_fails, solo se envían solicitudes de prueba en intervalos definidos por fail_timeout;up
: operativo, las solicitudes se envían como de costumbre;checking
: configurado como essential
y siendo verificado, solo se envían probe requests;draining
: similar a down
, pero las solicitudes de sesiones previamente enlazadas (a través de sticky) siguen enviándose;unhealthy
: no operativo, solo se envían probe requests.selected
current
total
last
max_conns
data
received
sent
health
fails
unavailable
unavailable
por haber llegado al límite de max_failsdowntime
unavailable
para la seleccióndownstart
unavailable
, formateado como una fechaconnect_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
también tiene un subobjeto probes
que almacena los contadores de sondas de salud del peer,
mientras que el estado del peer puede ser checking
y unhealthy
,
además de los valores listados en la tabla anterior:{
"192.168.16.4:80": {
"state": "unhealthy",
"...": "...",
"health": {
"...": "...",
"probes": {
"count": 2,
"fails": 2,
"last": "2025-08-21T11:03:54Z"
}
}
}
}
checking
de state
significa que el peer, que tiene una sonda configurada como essential
, aún no ha sido verificado; el valor unhealthy
significa que el peer está funcionando incorrectamente. Ambos estados también implican que el peer no está incluido en el balanceo de carga. Para detalles sobre sondas de salud, consulte upstream_probe.probes
:count
fails
last
queue
(PRO)#queue
con contadores de la cola de solicitudes:{
"queue": {
"queued": 20112,
"waiting": 1011,
"dropped": 6031,
"timedout": 560,
"overflows": 13
}
}
queued
waiting
dropped
timedout
overflows
Upstream de flujo#
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 respaldoweight
state
busy
: indica que el número de solicitudes al servidor ha alcanzado el límite establecido por max_conns,
y no se envían nuevas solicitudesdown
: deshabilitado manualmente, no se envían solicitudesrecovering
: recuperándose tras una falla
según slow_start,
se envían más y más solicitudes con el tiempounavailable
: alcanzó el límite max_fails,
solo se envían solicitudes de cliente de prueba
en intervalos definidos por fail_timeout;up
: operativo, las solicitudes se envían como de costumbrechecking
: configurado como essential
y estando verificado,
solo se envían probe requestsdraining
: similar a down
,
pero las solicitudes de sesiones previamente enlazadas
(mediante sticky) siguen enviándoseunhealthy
: no operativo,
solo se envían probe requestsselected
current
total
last
max_conns
data
received
sent
health
fails
unavailable
unavailable
por alcanzar el límite max_failsdowntime
unavailable
para seleccióndownstart
unavailable
, formateado como una fechaconnect_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
también tiene un subobjeto probes
que almacena los contadores de sondas de salud del peer,
mientras que el estado del peer puede ser checking
y unhealthy
,
además de los valores listados en la tabla anterior:{
"192.168.16.4:80": {
"state": "unhealthy",
"...": "...",
"health": {
"...": "...",
"probes": {
"count": 2,
"fails": 2,
"last": "2025-08-21T11:03:54Z"
}
}
}
}
checking
de state
significa que el peer, que tiene una sonda configurada como essential
,
aún no ha sido verificado; el valor unhealthy
significa que el peer está funcionando mal.
Ambos estados también implican que el peer no está incluido en el balanceo de carga.
Para detalles sobre sondas de salud, consulte upstream_probe.probes
:count
fails
last
API de Configuración Dinámica (solo PRO)#
/config
que permite actualizaciones dinámicas
a la configuración de Angie en formato JSON
con peticiones HTTP PUT
, PATCH
y DELETE
.
Todas las actualizaciones son atómicas; los nuevos ajustes se aplican en su totalidad,
o ninguno se aplica. En caso de error, Angie informa la razón.Subsecciones de
/config
#/config
para los módulos HTTP y stream; el número de ajustes elegibles para configuración dinámica
está en constante aumento./config/http/upstreams/<upstream>/servers/<name>
#<upstream>
/config
, debe
tener configurada una directiva zone, que define una
zona de memoria compartida.<name>
<service>@<host>
, donde:<service>@
es una parte opcional
que especifica el nombre del servicio para resolver SRV.<host>
es el nombre de dominio del servicio (cuando resolve
está presente) o su IP; también puede definirse un puerto.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
y
sid
, tal como se describe en la sección server.drain
(PRO);
para habilitar drain
,
establezca down
al valor de cadena 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
solo puede establecerse al añadir un nuevo peer./config/stream/upstreams/<upstream>/servers/<name>
#<upstream>
upstream
;
para configurarlo vía /config
,
debe contener la directiva zone que define una zona de memoria compartida.<name>
<upstream>
especificado;
especificado en el formato <service>@<host>
, donde:<service>@
— parte opcional
que especifica el nombre del servicio para resolver SRV.<host>
— nombre de dominio del servicio (cuando resolve está presente)
o IP; también se puede especificar el puerto.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
, y down
descritos en la sección server.drain
(PRO);
para habilitar el modo drain
,
establezca el parámetro down
al valor de cadena 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
solo puede establecerse al añadir un nuevo servidor.connection_drop=<value>
(PRO) para anular las configuraciones de proxy_connection_drop, grpc_connection_drop, fastcgi_connection_drop, scgi_connection_drop y uwsgi_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 una entidad en cualquier ruta existente dentro de /config
, tal como lo hace para otras secciones de la API./config/http/upstreams/backend/servers/
permite 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
crea una nueva entidad JSON en la ruta especificada o reemplaza completamente una existente.max_fails
, no especificado anteriormente, del servidor backend.example.com
dentro del 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
elimina configuraciones previamente definidas en la ruta especificada; al hacerlo, vuelve a los valores predeterminados si los hay.max_fails
previamente establecido del servidor backend.example.com
dentro del 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
ha vuelto a su valor predeterminado.connection_drop=<value>
(PRO) para anular las configuraciones proxy_connection_drop, grpc_connection_drop, fastcgi_connection_drop, scgi_connection_drop y 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
crea una nueva entidad en la ruta especificada o reemplaza parcialmente o complementa una existente (RFC 7386)
proporcionando una definición JSON en su carga útil.down
del servidor
backend.example.com
dentro del upstream,
dejando el 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
fusionado con el existente, en lugar de reemplazarlo, como ocurriría con PUT
.DELETE
; en particular, restablece los valores a sus predeterminados.down
añadida anteriormente y, al mismo tiempo, actualizar 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 el cual se proporcionó un null
, fue eliminado;
max_conns
fue actualizado.