Arquivos de Configuração#
O Angie usa um arquivo de configuração baseado em texto. Por padrão, este arquivo é nomeado
angie.conf e está localizado de acordo com o parâmetro de compilação
--conf-path, tipicamente no diretório /etc/angie.
Um arquivo de configuração geralmente consiste nos seguintes contextos:
events – Processamento geral de conexões
http – Tráfego HTTP
mail – Tráfego de email
stream – Tráfego TCP e UDP
wasm_modules – Runtime WASM
Diretivas que são colocadas fora desses contextos são consideradas como estando no
contexto main:
user angie; # uma diretiva no contexto 'main'
events {
# configuração do processamento de conexões
}
http {
# Configuração específica para HTTP e que afeta todos os servidores virtuais
server {
# configuração do servidor virtual HTTP 1
location /one {
# configuração para processar URIs que começam com '/one'
}
location /two {
# configuração para processar URIs que começam com '/two'
}
}
server {
# configuração do servidor virtual HTTP 2
}
}
stream {
# Configuração específica para TCP/UDP e que afeta todos os servidores virtuais
server {
# configuração do servidor virtual TCP 1
}
}
Para simplificar o gerenciamento da configuração, recomendamos usar a diretiva include
no arquivo principal angie.conf para referenciar o conteúdo de
arquivos específicos por funcionalidade:
include /etc/angie/http.d/*.conf;
include /etc/angie/stream.d/*.conf;
Herança#
Em geral, um contexto filho (aquele que está contido dentro de outro contexto, que é considerado seu pai) herda as configurações das diretivas definidas no nível pai. Algumas diretivas podem aparecer em múltiplos contextos; nesses casos, você pode sobrescrever as configurações herdadas do pai incluindo a diretiva no contexto filho.
Sintaxe#
Unidades de Medida#
Você pode especificar tamanhos usando as seguintes unidades:
Sem sufixo | Bytes |
| Kilobytes |
| Megabytes |
| Gigabytes |
Por exemplo: 1024, 8k, 1m, 16g.
Intervalos de tempo podem ser especificados em milissegundos, segundos, minutos, horas, dias, e assim por diante, usando os seguintes sufixos:
| Milissegundos |
| Segundos |
| Minutos |
| Horas |
| Dias |
| Semanas |
| Meses (assumidos como iguais a 30 dias) |
| Anos (assumidos como iguais a 365 dias) |
Múltiplas unidades podem ser combinadas em um único valor especificando-as em ordem
da mais significativa para a menos significativa, opcionalmente separadas por
espaços em branco. Por exemplo, "1h 30m" especifica a mesma duração que
"90m" ou "5400s". Um valor sem sufixo é interpretado como
segundos. É recomendado sempre especificar um sufixo.
Alguns intervalos de tempo só podem ser especificados com resolução de segundos.
Diretivas#
Cada diretiva consiste em um nome e um conjunto de parâmetros. Se qualquer parte de uma diretiva precisar conter espaços, ela deve ser colocada entre aspas ou escapar os espaços:
add_header X-MyHeader "foo bar";
add_header X-MyHeader foo\ bar;
Se um parâmetro nomeado precisar de espaços e você usar aspas, seu nome também deve ser colocado entre aspas:
server example.com "sid=server 1";
Strings com variáveis#
Muitas diretivas aceitam uma string com variáveis (também chamada de valor
complexo): um valor de parâmetro que combina texto literal com referências a
variáveis como $name, ${name} e as variáveis de captura de expressões
regulares de $1 a $9. Esse valor é compilado uma única vez quando a
configuração é carregada e reavaliado a cada requisição ou conexão, de modo que
a string resultante pode variar de uma requisição para outra. Um valor que não
contém $ se comporta como um literal simples e não acrescenta sobrecarga por
requisição.
Use a forma com chaves ${name} para separar o nome de uma variável do texto
que vem imediatamente em seguida, como em ${name}_suffix. As variáveis de
captura de $1 a $9 só estão disponíveis onde uma expressão regular com os
grupos correspondentes tenha coincidido, e exigem uma compilação com PCRE.
Não há escape de $ por barra invertida. Para incluir um $ literal, defina
uma variável que o contenha, por exemplo com map ou set, e
referencie essa variável no valor.
O conjunto de variáveis disponíveis depende do contexto: as do subsistema http diferem das do subsistema stream; consulte o índice de variáveis para ver a lista completa. As variáveis são geradas tanto pelos módulos integrados quanto por diretivas como map, geo e split_clients.
Para algumas diretivas a presença de uma variável altera o comportamento em tempo de execução: o valor é então resolvido dinamicamente a cada requisição em vez de ser fixado quando a configuração é carregada, o que pode exigir um resolver. A diretiva proxy_pass é um desses casos.
Configurando Hashes#
Para processar eficientemente conjuntos estáticos de dados, como nomes de servidor, valores da diretiva map, tipos MIME e nomes de cabeçalhos de requisição, o Angie utiliza tabelas hash. Durante a inicialização e cada reconfiguração, o Angie determina o tamanho ótimo para essas tabelas hash para garantir que o tamanho do bucket, que armazena chaves com valores hash idênticos, não exceda o parâmetro configurado (hash bucket size). O tamanho da tabela é medido em buckets e é ajustado até exceder o parâmetro hash max size. A maioria das tabelas hash têm diretivas correspondentes para ajustar esses parâmetros, como server_names_hash_max_size e server_names_hash_bucket_size para nomes de servidor.
O parâmetro hash bucket size é alinhado a um múltiplo do tamanho da
linha de cache do processador. Este alinhamento melhora a eficiência da busca de chaves em
processadores modernos reduzindo o número de acessos à memória. Se o hash bucket size
for igual ao tamanho de uma linha de cache, o número máximo de acessos à memória durante uma
busca de chave será dois: um para calcular o endereço do bucket e outro para buscar
dentro do bucket. Portanto, se o Angie indicar que o hash max
size ou hash bucket size deve ser aumentado, comece aumentando o hash
max size. Para aplicar mudanças no arquivo de configuração, ele deve ser recarregado. Você pode
reiniciar o processo do Angie com uma verificação de sintaxe da configuração antes: Alternativamente, você pode recarregar o serviço para aplicar a nova configuração sem
interromper o processamento das requisições atuais:Recarregando a Configuração#
$ sudo angie -t && sudo service angie restart
$ sudo angie -t && sudo service angie reload