Primeros pasos#

Esta guía lleva un Angie recién instalado desde la página de bienvenida del paquete hasta un servidor que aloja archivos y reenvía solicitudes a una aplicación, sirve unos y otras por HTTPS con certificados que obtiene por sí mismo e informa de sus propias estadísticas. Si ya usa nginx, migre su configuración en lugar de reconstruirla a mano.

Cada paso amplía el archivo que deja el anterior, así que recórralos en orden. Solo el paso de HTTPS es opcional: es el único que necesita un nombre de dominio público, y nada de lo que sigue depende de él.

Necesita Angie instalado desde un paquete en un Linux basado en systemd y una cuenta que pueda usar sudo. En Alpine y FreeBSD, la página de instalación ofrece los comandos service que se usan en lugar de systemctl.

Comprobación de la instalación#

Confirme qué compilación tiene instalada:

$ angie -v
Angie version: Angie/1.12.1

Inicie el servicio y solicite la página predeterminada:

$ sudo systemctl start angie
$ curl -I localhost
HTTP/1.1 200 OK
Server: Angie/1.12.1
...

La respuesta proviene del servidor de bienvenida que trae el paquete; el siguiente paso muestra dónde está definido.

Los cambios de configuración se aplican con una recarga, no con un reinicio: el proceso maestro vuelve a leer la configuración e inicia nuevos procesos de trabajo, mientras que los antiguos terminan las solicitudes que están atendiendo antes de salir. Para el conjunto completo de comandos de inicio, detención, recarga y rotación de registros, las señales que hay detrás y los parámetros de línea de comandos, consulte Control en tiempo de ejecución.

Estructura de la configuración#

El archivo de configuración principal es angie.conf; su ubicación está compilada en el binario:

$ angie -V 2>&1 | tr ' ' '\n' | grep conf-path
--conf-path=/etc/angie/angie.conf

El archivo se organiza en contextos: bloques que agrupan las directivas que corresponden a un tipo de tráfico:

  • events — procesamiento general de conexiones

  • http — tráfico HTTP

  • mail — tráfico de correo

  • stream — tráfico TCP y UDP

Los archivos bajo /etc/angie/http.d/ se incluyen dentro de http, así que contienen bloques server y directivas de nivel http. Un bloque server describe un servidor virtual, y un bloque location dentro de él describe cómo manejar un conjunto de URI de solicitud.

La página de bienvenida proviene de /etc/angie/http.d/default.conf, el único servidor que define el paquete. Esta guía reemplaza ese archivo y deja angie.conf tal como se instaló.

La herencia entre contextos, las reglas de sintaxis y las unidades de tamaño y tiempo que usan los parámetros de las directivas se tratan en Archivos de configuración.

Servicio de archivos estáticos#

Empiece con archivos en disco. Cree dos directorios con un archivo cada uno; el contenido nombra el directorio, así que una respuesta muestra de dónde vino el archivo:

$ sudo mkdir -p /data/www /data/images
$ echo 'Hello from /data/www' | sudo tee /data/www/index.html
Hello from /data/www
$ echo 'Hello from /data/images' | sudo tee /data/images/example.png
Hello from /data/images

El segundo archivo solo hace las veces de una imagen; un PNG real se comporta igual.

Reemplace el contenido de /etc/angie/http.d/default.conf por:

/etc/angie/http.d/default.conf#
server {
    listen 80;

    location / {
        root /data/www;
    }

    location /images/ {
        root /data;
    }
}

Pruebe la configuración y recargue:

$ sudo angie -t && sudo systemctl reload angie

Ambos archivos ahora son accesibles, y uno que falte da un 404:

$ curl localhost/index.html
Hello from /data/www
$ curl localhost/images/example.png
Hello from /data/images
$ curl -o /dev/null -w '%{http_code}\n' localhost/images/missing.png
404

Ambas son ubicaciones de prefijo: un URI de solicitud coincide cuando empieza con la cadena dada y gana el prefijo coincidente más largo. /index.html coincidió con location /, el prefijo más corto posible, que captura todo lo que las demás ubicaciones no cubren.

La directiva root no nombra el directorio desde el que servir — nombra el directorio al que se añade el URI de solicitud completo, por lo que location /images/ necesita root /data, no /data/images: el URI /images/example.png añadido a /data da /data/images/example.png.

Nota

Cuando una solicitud no hace lo que espera, la respuesta está casi siempre en los registros de acceso y de errores, que de forma predeterminada se escriben en /var/log/angie/.

Cómo se compara una solicitud con los servidores virtuales y las ubicaciones, incluidas las ubicaciones con expresiones regulares y el orden en que se comprueban, se describe en Conexiones, sesiones, solicitudes, registros. Las directivas que asignan URI a archivos — root, alias, index, try_files — están en la referencia de módulos HTTP.

Proxy a una aplicación#

La segunda tarea habitual de Angie es situarse delante de una aplicación y reenviarle las solicitudes. Aquí el propio Angie hace de aplicación: un segundo servidor, escuchando solo en el puerto de loopback 8080, sirve un directorio propio. Reemplácelo por la aplicación real más adelante.

$ sudo mkdir -p /data/app
$ echo 'Hello from the application' | sudo tee /data/app/index.html
Hello from the application

Ponga ese servidor en un archivo propio:

/etc/angie/http.d/app.conf#
server {
    listen 127.0.0.1:8080;

    root /data/app;
}

En default.conf, reemplace root en location / por proxy_pass, y haga coincidir las imágenes por extensión en lugar de por prefijo:

/etc/angie/http.d/default.conf#
server {
    listen 80;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data;
    }
}

Pruebe la configuración y recargue:

$ sudo angie -t && sudo systemctl reload angie

Las solicitudes ahora llegan a la aplicación, excepto las de imágenes:

$ curl localhost/
Hello from the application
$ curl localhost/images/example.png
Hello from /data/images

La segunda ubicación empieza con ~, lo que la convierte en una ubicación de expresión regular en lugar de prefijo. Angie comprueba primero las ubicaciones de prefijo y recuerda la coincidencia más larga, luego prueba las expresiones regulares en el orden en que aparecen; si una de ellas coincide, gana. Eso es lo que permite que un único patrón corto separe las solicitudes de imágenes de la ubicación general que hay encima, de modo que Angie las atiende desde disco sin pasar por la aplicación.

proxy_pass cuenta con un amplio conjunto de directivas complementarias — para cabeceras de solicitud, tiempos de espera, almacenamiento en búfer y caché — documentadas en el módulo Proxy. Para repartir las solicitudes entre varios servidores de aplicación en lugar de uno solo, defina un bloque upstream y haga proxy hacia él por su nombre.

HTTPS automático#

Este paso necesita un nombre de dominio que resuelva a la dirección pública de este host, y el puerto 80 accesible desde internet: la autoridad de certificación valida la propiedad obteniendo un archivo por HTTP. Sin ambos, pase al siguiente paso; nada de lo que sigue depende de este.

Angie obtiene y renueva los certificados por sí mismo, mediante ACME, sin cliente externo ni tarea cron de renovación. Añada un acme_client encima del bloque server (una directiva de nivel http) y haga referencia al cliente desde el servidor, poniendo sus propios nombres en lugar de example.com y www.example.com:

/etc/angie/http.d/default.conf#
acme_client example https://acme-v02.api.letsencrypt.org/directory;

server {
    listen 80;
    listen 443 ssl;

    server_name example.com www.example.com;
    acme example;

    ssl_certificate     $acme_cert_example;
    ssl_certificate_key $acme_cert_key_example;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data;
    }
}

Angie resuelve el nombre de la autoridad de certificación a través de /etc/resolv.conf de forma predeterminada, así que no hace falta ninguna directiva resolver. En un host sin conectividad IPv6, añada resolver conf ipv6=off; encima del bloque server para que deje de pedir registros AAAA que no puede usar.

El certificado se emite para los nombres de dominio listados en server_name en todos los servidores que hacen referencia al mismo cliente; las entradas que no son nombres de dominio, como las expresiones regulares y _, se omiten con una advertencia en el registro de errores. El certificado llega a ssl_certificate a través de una variable en lugar de una ruta de archivo, así que no hay nada que instalar ni que rotar a mano.

Pruebe la configuración y recargue:

$ sudo angie -t && sudo systemctl reload angie

Angie empieza a escuchar en el puerto 443 en cuanto se aplica la configuración, pero no puede completar un handshake TLS hasta que llega el certificado, así que mientras tanto las solicitudes a ese puerto fallan durante el handshake. La emisión no es instantánea; depende de la autoridad de certificación. Una vez que el certificado esté en su lugar:

$ curl -I https://www.example.com/
HTTP/1.1 200 OK
...

Si nunca llega, consulte el estado del cliente en /status/http/acme_clients/example en la API del siguiente paso y los mensajes de ACME en el registro de errores; si eso no es suficiente, active el registro de depuración.

Nota

Mientras todavía esté ajustando la configuración, apunte acme_client al directorio de pruebas (staging) de la autoridad de certificación — para Let's Encrypt, https://acme-staging-v02.api.letsencrypt.org/directory — para que los intentos fallidos no cuenten contra los límites de frecuencia de producción. Cambie a la URL de producción en cuanto aparezca un certificado.

La validación por DNS y TLS-ALPN, los certificados comodín, la vinculación de cuenta externa y el cambio desde Certbot se tratan en Configuración de ACME; las directivas y variables están en el módulo ACME.

Estadísticas del servidor#

Angie informa de su propio estado a través de una API REST integrada. Añada una ubicación para ella, restringida a solicitudes locales, y asigne al servidor una status_zone para que se recopilen sus contadores:

/etc/angie/http.d/default.conf#
acme_client example https://acme-v02.api.letsencrypt.org/directory;

server {
    listen 80;
    listen 443 ssl;

    server_name example.com www.example.com;
    acme example;

    ssl_certificate     $acme_cert_example;
    ssl_certificate_key $acme_cert_key_example;

    status_zone site;

    location / {
        proxy_pass http://127.0.0.1:8080;
    }

    location ~ \.(gif|jpg|png)$ {
        root /data;
    }

    location /status/ {
        api /status/;

        allow 127.0.0.1;
        deny all;
    }
}

Si se saltó el paso de HTTPS, añada solo las líneas resaltadas. El default.conf del paquete incluía esta misma ubicación /status/; desapareció cuando reemplazó ese archivo, así que vuelva a ponerla.

Pruebe la configuración y recargue; la API entonces responde con JSON:

$ sudo angie -t && sudo systemctl reload angie
$ curl localhost/status/angie/
{
    "version": "1.12.1",
    "build_time": "2026-07-17T06:58:49Z",
    "address": "192.0.2.10",
    "generation": 1,
    "load_time": "2026-07-17T10:23:06.011Z"
}

/status/connections informa de las conexiones aceptadas, descartadas, activas e inactivas. Los contadores por servidor y por ubicación son opcionales: un server aparece bajo /status/http/server_zones/ y una location bajo /status/http/location_zones/, cada uno solo una vez que lleva su propia status_zone. El servidor anterior lleva una, sus ubicaciones no:

$ curl localhost/status/http/server_zones/site
{
    "ssl": {
        "handshaked": 3,
        "reuses": 0,
        "timedout": 0,
        "failed": 0
    },

    "requests": {
        "total": 5,
        "processing": 1,
        "discarded": 0
    },

    "responses": {
        "200": 3,
        "404": 1
    },

    "data": {
        "received": 412,
        "sent": 1418
    }
}

El objeto ssl está presente porque el servidor escucha con ssl; sin él, la zona empieza en requests.

El árbol completo de endpoints — grupos de servidores, cachés, resolutores DNS, zonas de memoria compartida, clientes ACME y, en Angie PRO, la configuración dinámica — está documentado en el módulo API. Si prefiere verlo en lugar de consultarlo con curl, el panel web Console Light muestra los mismos datos.

Próximos pasos#

Instrucciones

Guías paso a paso para tareas concretas: SSL, OIDC, clústeres, paneles de monitorización y métricas personalizadas.

Módulos

La referencia de todas las directivas y variables, agrupadas por módulo.

Acceso rápido

Enlaces cortos que llevan directamente a la documentación de una directiva.

Migración desde nginx

Si también usa nginx en otro lugar, traslade esas configuraciones.