Primeiros passos#

Este guia passo a passo leva um Angie recém-instalado, partindo da página de boas-vindas do pacote, até um servidor que hospeda arquivos, encaminha requisições para uma aplicação, serve ambos por HTTPS com certificados que ele mesmo obtém, e relata suas próprias estatísticas. Se você já usa o nginx, migre a configuração existente em vez de reconstruí-la manualmente.

Cada etapa expande o arquivo que a anterior deixou pronto, então percorra-as em ordem. Apenas a etapa de HTTPS é opcional: é a única etapa que exige um nome de domínio público, e nada depois dela depende dela.

Você precisa do Angie instalado a partir de um pacote em um Linux baseado em systemd e de uma conta que possa usar sudo. No Alpine e no FreeBSD, a página de instalação traz os comandos service a usar no lugar de systemctl.

Verificando a instalação#

Confirme a versão instalada:

$ angie -v
Angie version: Angie/1.12.1

Inicie o servidor e peça uma página a ele:

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

A resposta vem do servidor de página de boas-vindas que o pacote traz; a próxima etapa mostra onde ele é definido.

As alterações de configuração são aplicadas com uma recarga, não uma reinicialização: o processo mestre relê a configuração e inicia novos processos trabalhadores, enquanto os processos antigos terminam as requisições que estão atendendo antes de encerrar. O conjunto completo de comandos de início, parada, recarga e rotação de logs, os sinais por trás deles e os parâmetros de linha de comando estão descritos em Controle em tempo de execução.

Estrutura da configuração#

O arquivo de configuração principal é angie.conf; sua localização é compilada no binário:

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

O arquivo é organizado em contextos — blocos que agrupam as diretivas pertencentes a um tipo de tráfego:

  • events — processamento geral de conexões

  • http — tráfego HTTP

  • mail — tráfego de e-mail

  • stream — tráfego TCP e UDP

Os arquivos em /etc/angie/http.d/ são incluídos dentro de http, portanto contêm blocos server e diretivas de nível http. Ali, um bloco server descreve um servidor virtual, e um bloco location aninhado nele descreve como tratar um conjunto de URIs de requisição.

A página de boas-vindas vem de /etc/angie/http.d/default.conf, o único servidor que o pacote define. Este guia passo a passo substitui esse arquivo e deixa angie.conf como foi instalado.

A herança entre contextos, as regras de sintaxe e as unidades de tamanho e tempo usadas pelos parâmetros das diretivas estão em Arquivos de configuração.

Servindo arquivos estáticos#

Comece com arquivos em disco. Crie dois diretórios com um arquivo cada; o conteúdo indica o diretório de origem, para que a resposta mostre de onde o arquivo veio:

$ 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

O segundo arquivo apenas simula uma imagem; um PNG real se comporta da mesma forma.

Substitua o conteúdo 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;
    }
}

Teste a configuração e recarregue:

$ sudo angie -t && sudo systemctl reload angie

Ambos os arquivos agora estão acessíveis, e um arquivo ausente resulta em um 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 as locations são de prefixo: elas correspondem às URIs de requisição que começam com a string informada, e vence o prefixo mais longo que corresponder. /index.html correspondeu a location /, o prefixo mais curto possível, que captura tudo o que as outras locations não capturam.

A diretiva root não indica o diretório de onde servir — ela indica o diretório ao qual toda a URI de requisição é anexada, e é por isso que location /images/ precisa de root /data, não de /data/images: a URI /images/example.png anexada a /data resulta em /data/images/example.png.

Nota

Quando uma requisição não faz o que você espera, a resposta está quase sempre nos logs de acesso e de erro, gravados por padrão em /var/log/angie/.

Como uma requisição é comparada com servidores virtuais e locations, incluindo as locations com expressões regulares e a ordem em que são testadas, está descrito em Conexões, sessões, requisições, logs. As diretivas que mapeiam URIs para arquivos — root, alias, index, try_files — estão na referência dos módulos HTTP.

Fazendo proxy para uma aplicação#

A segunda função comum do Angie é atuar como proxy reverso de uma aplicação, encaminhando as requisições para ela. Aqui o próprio Angie faz o papel da aplicação: um segundo servidor, escutando apenas na porta 8080 do loopback, serve um diretório próprio. Substitua-o pela aplicação real mais tarde.

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

Coloque esse servidor em um arquivo próprio:

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

    root /data/app;
}

Em default.conf, substitua root em location / por proxy_pass, e faça a correspondência das imagens por extensão em vez de por prefixo:

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

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

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

Teste a configuração e recarregue:

$ sudo angie -t && sudo systemctl reload angie

As requisições agora chegam à aplicação, exceto as de imagens:

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

A segunda location começa com ~, o que a torna uma location de expressão regular em vez de uma de prefixo. O Angie verifica primeiro as locations de prefixo e memoriza a correspondência mais longa; depois testa as expressões regulares na ordem em que aparecem, e se uma delas corresponder, é ela que vence. É isso que permite a um único padrão curto separar as requisições de imagens da location que recolhe todo o resto, de modo que o Angie as responde direto do disco, sem envolver a aplicação.

proxy_pass tem um extenso conjunto de diretivas complementares — para cabeçalhos de requisição, tempos limite, buffering e cache — documentadas no módulo Proxy. Para distribuir as requisições entre vários servidores de aplicação em vez de um só, defina um bloco upstream e faça proxy para ele pelo nome.

HTTPS automático#

Esta etapa precisa de um nome de domínio que resolva para o endereço público deste host, e da porta 80 acessível pela internet: a autoridade certificadora valida a propriedade buscando um arquivo por HTTP. Sem os dois, pule para a próxima etapa; nada depois desta depende dela.

O Angie obtém e renova certificados sozinho, via ACME, sem cliente externo e sem uma tarefa de cron para renovação. Adicione um acme_client acima do bloco server (uma diretiva de nível http) e referencie o cliente a partir do server, colocando seus próprios nomes no lugar de example.com e 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;
    }
}

Por padrão, o Angie resolve o nome da autoridade certificadora por meio de /etc/resolv.conf, então nenhuma diretiva resolver é necessária. Em um host sem conectividade IPv6, adicione resolver conf ipv6=off; acima do bloco server para que ele pare de solicitar registros AAAA que não pode usar.

O certificado é emitido para os nomes de domínio listados em server_name em todos os servidores que referenciam o mesmo cliente; entradas que não são nomes de domínio, como expressões regulares e _, são ignoradas com um aviso no log de erros. O certificado chega até ssl_certificate por meio de uma variável, e não de um caminho de arquivo, então não há nada para instalar nem para trocar manualmente.

Teste a configuração e recarregue:

$ sudo angie -t && sudo systemctl reload angie

O Angie vincula a porta 443 assim que a configuração é aplicada, mas não consegue concluir um handshake TLS até que o certificado chegue, então as requisições a essa porta falham durante o handshake nesse meio-tempo. A emissão não é instantânea; depende da autoridade certificadora. Assim que o certificado estiver disponível:

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

Se ele nunca chegar, veja o estado do cliente em /status/http/acme_clients/example, na API apresentada na próxima etapa, e as mensagens do ACME no log de erros; se isso não for suficiente, ative o log de depuração.

Nota

Enquanto você ainda está acertando a configuração, aponte o acme_client para o diretório de staging da autoridade certificadora — no caso do Let's Encrypt, https://acme-staging-v02.api.letsencrypt.org/directory — para que as tentativas malsucedidas não contem para os limites de taxa de produção. Mude para a URL de produção assim que um certificado aparecer.

Validação por DNS e TLS-ALPN, certificados curinga, vinculação de conta externa e a mudança a partir do Certbot estão em Configuração ACME; as diretivas e variáveis estão no módulo ACME.

Estatísticas do servidor#

O Angie relata o próprio estado por meio de uma API REST integrada. Adicione uma location para ela, restrita a requisições locais, e dê ao servidor uma status_zone para que seus contadores sejam coletados:

/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;
    }
}

Se você pulou a etapa de HTTPS, adicione apenas as linhas destacadas. O default.conf do pacote já trazia essa mesma location /status/; ela desapareceu quando você substituiu esse arquivo, então adicione-a de volta.

Teste a configuração e recarregue; a API então responde com 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 relata as conexões aceitas, descartadas, ativas e ociosas. Os contadores por servidor e por location são opcionais: um server aparece em /status/http/server_zones/ e uma location em /status/http/location_zones/, cada um somente depois de receber sua própria status_zone. O servidor acima tem uma, suas locations não têm:

$ 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
    }
}

O objeto ssl está presente porque o servidor escuta com ssl; sem ele a zona começa em requests.

A árvore completa de endpoints — upstreams, caches, resolvers, zonas de memória compartilhada, clientes ACME e, no Angie PRO, a configuração dinâmica — está documentada no módulo API. Se você prefere visualizar esses dados a consultá-los com curl, o painel web Console Light apresenta os mesmos números.

Para onde ir a seguir#

Instruções

Guias passo a passo para tarefas específicas: SSL, OIDC, clusters, painéis de monitoramento e métricas personalizadas.

Módulos

A referência de todas as diretivas e variáveis, agrupadas por módulo.

Acesso rápido

Links curtos que levam direto à documentação de uma diretiva.

Migrando do nginx

Se você também usa o nginx em outro lugar, migre essas configurações também.