Módulo HTTP#
O módulo HTTP principal implementa a funcionalidade básica de um servidor HTTP: isso inclui definir blocos de servidor, configurar localizações para roteamento de requisições, servir arquivos estáticos e controlar acesso, configurar redirecionamentos, suportar conexões keep-alive, e gerenciar cabeçalhos de requisição e resposta.
Os outros módulos nesta seção estendem essa funcionalidade, permitindo que você
configure e otimize flexivelmente o servidor HTTP para vários cenários e
requisitos. Se desabilitado, redirecionamentos emitidos pelo Angie serão relativos. Veja também as diretivas server_name_in_redirect e port_in_redirect. Habilita ou desabilita o uso de I/O de arquivo assíncrono (AIO) no FreeBSD e Linux: No FreeBSD, AIO pode ser usado a partir do FreeBSD 4.3. Antes do FreeBSD 11.0, AIO pode ser linkado estaticamente no kernel: ou carregado dinamicamente como um módulo carregável do kernel: No Linux, AIO pode ser usado a partir da versão 2.6.22 do kernel. Além disso, é necessário habilitar directio, ou caso contrário a leitura será bloqueante: No Linux, directio pode ser usado apenas para ler blocos que estão alinhados em limites de 512 bytes (ou 4K para XFS). O final não alinhado do arquivo é lido em modo bloqueante. O mesmo vale para requisições de intervalo de bytes e para requisições FLV que não começam do início de um arquivo: a leitura de dados não alinhados no início e fim de um arquivo será bloqueante. Quando tanto AIO quanto sendfile estão habilitados no Linux, AIO é usado para arquivos que são maiores ou iguais ao tamanho especificado na diretiva directio, enquanto sendfile é usado para arquivos de tamanhos menores ou quando directio está desabilitado: Finalmente, arquivos podem ser lidos e enviados usando multi-threading, sem bloquear um processo worker: Operações de leitura e envio de arquivo são transferidas para threads do pool especificado. Se o nome do pool for omitido, o pool com o nome "default" é usado. O nome do pool também pode ser definido com variáveis: Por padrão, multi-threading está desabilitado, deve ser habilitado com o parâmetro de configuração Veja também a diretiva sendfile. Se aio estiver habilitado, especifica se é usado para escrever arquivos. Atualmente, isso funciona apenas quando usando Define uma substituição para a localização especificada. Por exemplo, com a seguinte configuração: na requisição de O valor path pode conter variáveis, exceto $document_root e $realpath_root. Se Quando a localização corresponde à última parte do valor da diretiva: é melhor usar a diretiva root em vez disso: Atrasa o processamento de requisições não autorizadas com código de resposta 401 para prevenir
ataques de temporização quando o acesso é limitado por senha ou pelo
resultado de subrequisição. Padrão http, server, location Controla o comportamento de redirecionamento
quando uma localização de prefixo termina com uma barra: Aqui, uma requisição para O valor Padrão http, server, location Permite desabilitar a codificação de transferência em chunks no HTTP/1.1. Pode ser útil quando usando um software que falha em suportar codificação em chunks apesar do requisito do padrão. Cria um contexto especial O contexto O contexto enviar requisições para a autoridade certificadora no módulo ACME
via o requisições para a API do Docker no módulo Docker
via os verificações de saúde de servidores proxy via upstream_probe (PRO); modo sticky learn com O suporte para múltiplos blocos Diretivas especificadas em cada bloco Exemplo de uso de múltiplos blocos Nota As mesmas diretivas são permitidas aqui como em Diretivas que operam em outras
etapas de processamento de requisição
(como limit_req, auth_request,
try_files, filtros de imagem, XSLT, etc.)
não funcionam aqui. Padrão http, server, location Define o tamanho do buffer para leitura do corpo da requisição do cliente. Se o corpo da requisição for maior que o buffer, todo o corpo ou apenas sua parte é escrito em um arquivo temporário. Por padrão, o tamanho do buffer é igual a duas páginas de memória. No x86, outras plataformas de 32 bits e x86-64, isso é 8K. Em outras plataformas de 64 bits, geralmente é 16K. Padrão http, server, location Determina se deve salvar todo o corpo da requisição do cliente em um arquivo. Esta diretiva pode ser usada durante depuração, ou ao usar a variável $request_body_file, ou o método $r->request_body_file do módulo Perl. arquivos temporários não são removidos após o processamento da requisição permite que os arquivos temporários deixados após o processamento da requisição sejam removidos Padrão http, server, location Determina se deve salvar todo o corpo da requisição do cliente em um único buffer. A diretiva é recomendada ao usar a variável $request_body para reduzir o número de operações de cópia envolvidas. Padrão http, server, location Define um diretório para armazenar arquivos temporários com corpos de requisição do cliente. Até três níveis de hierarquia de subdiretórios podem ser usados sob o diretório especificado. Por exemplo, na seguinte configuração um caminho para um arquivo temporário pode parecer assim: Define um timeout para leitura do corpo da requisição do cliente. O timeout é definido apenas para um período entre duas operações de leitura sucessivas, não para a transmissão de todo o corpo da requisição. Se um cliente não transmitir nada dentro deste tempo, a requisição é terminada com o erro 408 (Request Time-out). Define o tamanho do buffer para leitura do cabeçalho da requisição do cliente. Para a maioria das requisições, um buffer de 1K bytes é suficiente. No entanto, se uma requisição incluir cookies longos, ou vier de um cliente WAP, pode não caber em 1K. Se uma linha de requisição ou um campo de cabeçalho de requisição não couber neste buffer, então buffers maiores, configurados pela diretiva large_client_header_buffers, são alocados. Se a diretiva for especificada no nível server, o valor do servidor padrão pode ser usado. Consulte a seção Seleção de servidor virtual para detalhes. Define um timeout para leitura do cabeçalho da requisição do cliente. Se um cliente não transmitir o cabeçalho inteiro dentro deste tempo, a requisição é terminada com o erro 408 (Request Time-out). Define o tamanho máximo permitido do corpo da requisição do cliente. Se o tamanho em uma requisição exceder o valor configurado, o erro 413 (Request Entity Too Large) é retornado ao cliente. Esteja ciente de que os navegadores não conseguem exibir corretamente este erro. desabilita a verificação do tamanho do corpo da requisição do cliente Padrão http, server, location Permite o ajuste preciso das alocações de memória por conexão. Esta diretiva tem impacto mínimo na performance e geralmente não deve ser usada. Por padrão: em plataformas de 32 bits em plataformas de 64 bits Define o tipo MIME padrão de uma resposta. O mapeamento de extensões de nome de arquivo para tipos MIME pode ser definido com a diretiva types. Habilita o uso da flag ou ao usar aio no Linux. Define o alinhamento para directio. Na maioria dos casos, um alinhamento de 512 bytes é suficiente. No entanto, ao usar XFS no Linux, precisa ser aumentado para 4K. Padrão http, server, location Determina como os links simbólicos devem ser tratados ao abrir arquivos: Links simbólicos no caminho são permitidos e não verificados. Este é o comportamento padrão. Se qualquer componente do caminho for um link simbólico, o acesso ao arquivo é negado. O acesso ao arquivo é negado se qualquer componente do caminho for um link simbólico, e o link e o objeto para o qual ele aponta tiverem proprietários diferentes. Ao verificar links simbólicos (parâmetros Exemplo: Esta diretiva está disponível apenas em sistemas que possuem as interfaces Aviso Os parâmetros Em sistemas que não suportam abrir diretórios apenas para busca, usar estes parâmetros requer que os processos worker tenham permissões de leitura para todos os diretórios sendo verificados. Nota Os módulos AutoIndex, Random Index e DAV atualmente ignoram esta diretiva. Define a URI que será mostrada para os erros especificados. O valor uri pode usar variáveis. Exemplo: Isso causa um redirecionamento interno para a uri especificada com o método da requisição do cliente alterado para "GET" (para todos os métodos exceto "GET" e "HEAD"). Além disso, é possível alterar o código de resposta para outro usando a sintaxe como Se uma resposta de erro é processada por um servidor proxy ou um servidor FastCGI/uwsgi/SCGI/gRPC, e o servidor pode retornar diferentes códigos de resposta (por exemplo, 200, 302, 401, ou 404), é possível passar o código que ele retorna: Se não há necessidade de alterar o URI e método durante o redirecionamento interno, é possível passar o processamento de erro para um Nota Se um erro ocorre durante o processamento do uri, a resposta com o código do último erro ocorrido é retornada ao cliente. Também é possível usar redirecionamentos de URL para processamento de erro: Neste caso, por padrão, o código de resposta 302 é retornado ao cliente. Ele só pode ser alterado para um dos códigos de resposta de redirecionamento (301, 302, 303, 307, e 308). Habilita ou desabilita a geração automática do campo de cabeçalho de resposta Fornece o contexto do arquivo de configuração no qual as diretivas do servidor HTTP são especificadas. Padrão http, server, location Especifica como comparar o tempo de modificação de uma resposta com o tempo no campo de cabeçalho de requisição a resposta é sempre considerada modificada correspondência exata o tempo de modificação da resposta é menor ou igual ao tempo no campo de cabeçalho de requisição Controla se o Angie ignora campos de cabeçalho com nomes inválidos. Nomes válidos são compostos de letras inglesas, dígitos, hífens, e possivelmente sublinhados (conforme controlado pela diretiva underscores_in_headers). Se a diretiva é especificada no nível server, o valor do servidor padrão pode ser usado. Especifica que um determinado requisições redirecionadas pelas diretivas error_page, index, random_index, e try_files; requisições redirecionadas pelo campo de cabeçalho de resposta sub-requisições formadas pelo comando requisições alteradas pela diretiva rewrite. Exemplo: Nota Há um limite de 10 redirecionamentos internos por requisição para prevenir ciclos de processamento de requisição que podem ocorrer em configurações incorretas. Se este limite é atingido, o erro 500 (Internal Server Error) é retornado. Em tais casos, a mensagem Padrão http, server, location Desabilita conexões keep-alive com navegadores com comportamento inadequado. Os parâmetros browser especificam quais navegadores serão afetados. habilita conexões keep-alive com todos os navegadores desabilita conexões keep-alive com versões antigas do MSIE, uma vez que uma requisição POST é recebida desabilita conexões keep-alive com Safari e navegadores similares ao Safari no macOS e sistemas operacionais similares ao macOS Define o número máximo de requisições que podem ser atendidas através de uma conexão keep-alive. Após o número máximo de requisições ser feito, a conexão é fechada. O fechamento periódico de conexões é necessário para liberar alocações de memória por conexão. Portanto, usar um número máximo muito alto de requisições pode resultar em uso excessivo de memória e não é recomendado. Limita o tempo máximo durante o qual requisições podem ser processadas através de uma conexão keep-alive. Após este tempo ser atingido, a conexão é fechada seguindo o processamento da requisição subsequente. Padrão http, server, location timeout define um timeout durante o qual uma conexão keep-alive do cliente permanecerá aberta no lado do servidor desabilita conexões keep-alive do cliente O segundo parâmetro, opcional, define um valor no campo de cabeçalho O campo de cabeçalho Padrão http, server Define o número máximo e o tamanho dos buffers usados para ler cabeçalhos de requisição grandes do cliente. Uma linha de requisição não pode exceder o tamanho de um buffer, ou o erro 414 (Request-URI Too Large) é retornado ao cliente. Um campo de cabeçalho de requisição também não pode exceder o tamanho de um buffer, ou o erro 400 (Bad Request) é retornado ao cliente. Os buffers são alocados apenas sob demanda. Por padrão, o tamanho do buffer é igual a 8K bytes. Se após o fim do processamento da requisição uma conexão é transicionada para o estado keep-alive, esses buffers são liberados. Se a diretiva for especificada no nível server, o valor do servidor padrão pode ser usado. Limita os métodos HTTP permitidos dentro de uma localização. O parâmetro method pode ser um dos
seguintes: Nota A restrição neste exemplo se aplica a todos os métodos
exceto Limita a taxa de transmissão de resposta para um cliente. A taxa é especificada em bytes por segundo. O valor zero desabilita a limitação de taxa. O limite é definido por requisição, e assim se um cliente abrir simultaneamente duas conexões, a taxa geral será duas vezes maior que o limite especificado. O valor do parâmetro pode conter variáveis. Pode ser útil em casos onde a taxa deve ser limitada dependendo de uma determinada condição: O limite de taxa também pode ser definido na variável $limit_rate, no entanto, este método não é recomendado: O limite de taxa também pode ser definido no campo de cabeçalho Padrão http, server, location, if in location Define a quantidade inicial após a qual a transmissão adicional de uma resposta para um cliente será limitada por taxa. O valor do parâmetro pode conter variáveis. Exemplo: Controla como o Angie fecha conexões de cliente. instrui o Angie a aguardar e processar dados adicionais de um cliente antes de fechar completamente uma conexão, mas apenas se a heurística sugerir que um cliente pode estar enviando mais dados. fará com que o Angie aguarde incondicionalmente e processe dados adicionais do cliente. diz ao Angie para nunca aguardar mais dados e fechar a conexão imediatamente. Este comportamento quebra o protocolo e não deve ser usado em circunstâncias normais. Para controlar o fechamento de conexões HTTP/2, a diretiva deve ser especificada no nível server. Quando lingering_close está em efeito, esta diretiva especifica o tempo máximo durante o qual o Angie processará (lerá e ignorará) dados adicionais vindos de um cliente. Após isso, a conexão será fechada, mesmo se houver mais dados. Quando lingering_close está em efeito, esta diretiva especifica o tempo máximo de espera para que mais dados do cliente cheguem. Se os dados não forem recebidos durante este tempo, a conexão é fechada. Caso contrário, os dados são lidos e ignorados, e o Angie começa a aguardar mais dados novamente. O ciclo "aguardar-ler-ignorar" é repetido, mas não por mais tempo que o especificado pela diretiva lingering_time. Durante o desligamento gracioso, conexões keep-alive do cliente são fechadas apenas se elas estiverem inativas por pelo menos o tempo especificado em Nota No nginx, uma diretiva similar é chamada keepalive_min_timeout. Padrão server Define o address e a port para o socket de escuta, ou o caminho para um socket de domínio UNIX no qual o servidor aceitará requisições. Um address também pode ser um nome de host, por exemplo: Endereços IPv6 são especificados entre colchetes: Sockets de domínio UNIX são especificados com o prefixo Tanto address quanto port, ou apenas address ou apenas port, podem ser especificados.
Quando algumas partes são omitidas, as seguintes regras se aplicam: Se apenas o address for fornecido, a porta 80 é usada. Se apenas a port for fornecida,
o Angie escuta em todas as interfaces IPv4 (e IPv6, se habilitado) disponíveis.
O primeiro bloco Se a diretiva for omitida inteiramente, o Angie usa O servidor com este parâmetro especificado
será o servidor padrão para o par address:port fornecido
(juntos eles formam um socket de escuta). Se não houver diretivas com o parâmetro indica que todas as conexões aceitas neste socket de escuta devem funcionar em modo SSL. Isso permite uma configuração mais compacta para o servidor que manipula tanto requisições HTTP quanto HTTPS. configura a porta para aceitar conexões HTTP/2. Normalmente, para que isso funcione, o parâmetro Descontinuado desde a versão 1.2.0. Use a diretiva http2 em vez disso. configura a porta para aceitar conexões QUIC.
Para usar esta opção,
o Angie deve ter o módulo HTTP3
habilitado e configurado.
Com indica que todas as conexões aceitas neste socket de escuta devem usar o protocolo PROXY. A diretiva define a tabela de roteamento, FIB (a opção habilita "TCP Fast Open" para o socket de escuta e limita o comprimento máximo para a fila de conexões que ainda não completaram o handshake de três vias. Aviso Não habilite "TCP Fast Open" a menos que o servidor possa lidar com o recebimento do mesmo pacote SYN com dados mais de uma vez. Aviso Não habilite "TCP Fast Open" a menos que o servidor possa lidar com o recebimento do mesmo pacote SYN com dados mais de uma vez. define o parâmetro define o tamanho do buffer de recebimento (a opção define o tamanho do buffer de envio (a opção define o nome do filtro de aceitação (a opção instrui a usar um instrui a fazer uma chamada determina (via a opção de socket instrui a criar um socket de escuta individual para
cada processo worker (usando a opção de socket Aviso O uso inadequado do parâmetro habilita a aceitação de conexões via Multipath TCP (MPTCP),
suportado no kernel Linux desde a versão 5.6.
Este parâmetro é incompatível com Configura o comportamento "TCP keepalive" para o socket de escuta. se este parâmetro for omitido, então as configurações do sistema operacional estarão em vigor para o socket a opção a opção Alguns sistemas operacionais suportam a configuração de parâmetros TCP keepalive em uma
base por socket usando as opções de socket definirá o timeout de inatividade ( Exemplo: Define a configuração dependendo de se o URI da requisição corresponde
a qualquer uma das expressões de correspondência. A correspondência é realizada contra um URI normalizado, após decodificar o texto
codificado na forma "%XX", resolver referências a componentes de caminho relativo "."
e "..", e possível compressão de duas ou mais
barras adjacentes em uma única barra. Um Expressões regulares são especificadas com o modificador precedente: Correspondência insensível a maiúsculas e minúsculas Correspondência sensível a maiúsculas e minúsculas Para encontrar um location que corresponda a uma requisição, o Angie primeiro verifica os
locations definidos com strings de prefixo (locations de prefixo). Entre eles, o location
com o prefixo correspondente mais longo é selecionado e lembrado. Nota Para sistemas operacionais insensíveis a maiúsculas e minúsculas como macOS, a correspondência de string de prefixo
é insensível a maiúsculas e minúsculas.
No entanto, a correspondência é limitada a locales de byte único. Em seguida, as expressões regulares são verificadas na ordem de sua aparição no
arquivo de configuração. A busca para após a primeira correspondência, e a
configuração correspondente é usada. Se nenhuma correspondência com uma expressão regular for encontrada, então a
configuração do location de prefixo lembrado anteriormente é usada. Com algumas exceções mencionadas abaixo,
blocos Expressões regulares podem criar grupos de captura
que podem ser usados posteriormente com outras diretivas. Se o location de prefixo correspondente mais longo tiver o modificador Além disso, usando o modificador Exemplo: Uma requisição uma requisição uma requisição uma requisição e uma requisição Nota Se um prefixo Com uma localização de correspondência exata de URI, o redirecionamento não é aplicado: O prefixo Vários contextos Suponha que as configurações A, D e E do exemplo anterior
definam configurações idênticas; você pode combiná-las em uma Uma Aviso Uma Nota Atualmente, uma Habilita ou desabilita o registro de erros sobre arquivos não encontrados no error_log. Habilita ou desabilita o registro de sub-requisições no access_log. Define o número máximo de campos de cabeçalho de requisição do cliente permitidos.
Se este limite for excedido, um erro Quando esta diretiva é definida no nível server,
o valor do servidor padrão pode ser aplicado.
Para mais informações, consulte a seção Seleção de servidor virtual. Limita o número máximo permitido de intervalos em requisições byte-range. Requisições que excedem o limite são processadas como se não houvesse intervalos de bytes especificados. Por padrão, o número de intervalos não é limitado. desabilita completamente o suporte a byte-range Habilita ou desabilita a compressão de duas ou mais barras adjacentes em um URI em uma única barra. Note que a compressão é essencial para a correspondência correta de string de prefixo e localizações de expressão regular. Sem ela, a requisição e poderia ser processada como um arquivo estático. Então ela é convertida para Desativar a compressão pode se tornar necessário se um URI contém nomes codificados em base64, já que base64 usa o caractere "/" internamente. No entanto, por considerações de segurança, é melhor evitar desativar a compressão. Se a diretiva for especificada no nível server, o valor do servidor padrão pode ser usado. Habilita ou desabilita a adição de comentários às respostas para clientes MSIE com status maior que 400 para aumentar o tamanho da resposta para 512 bytes. Habilita ou desabilita a emissão de atualizações em vez de redirecionamentos para clientes MSIE. Padrão http, server, location Configura um cache que pode armazenar: descritores de arquivo abertos, seus tamanhos e tempos de modificação; informações sobre existência de diretórios; erros de busca de arquivo, como "arquivo não encontrado", "sem permissão de leitura", e assim por diante. O cache de erros deve ser habilitado separadamente pela diretiva open_file_cache_errors. define o número máximo de elementos no cache; no overflow do cache os elementos menos recentemente usados (LRU) são removidos; define um tempo após o qual um elemento é removido do cache se não foi acessado durante este tempo; Por padrão, é definido como 60 segundos. desabilita o cache. Exemplo: Padrão http, server, location Habilita ou desabilita o cache de erros de busca de arquivo por open_file_cache. Padrão http, server, location Define o número mínimo de acessos ao arquivo durante o período configurado pelo parâmetro Define um tempo após o qual os elementos do open_file_cache devem ser validados. Define o número e o tamanho dos buffers usados para ler uma resposta do disco. Habilita ou desabilita a especificação da porta em redirecionamentos absolutos emitidos pelo Angie. O uso do nome do servidor primário em redirecionamentos é controlado pela diretiva server_name_in_redirect. Se possível, a transmissão de dados do cliente será adiada até que o Angie tenha pelo menos o número especificado de bytes para enviar. desabilita o adiamento da transmissão de dados Define a quantidade de pré-leitura para o kernel ao trabalhar com arquivos. No Linux, a chamada de sistema No FreeBSD, a chamada de sistema Padrão http, server, location Habilita ou desabilita fazer vários redirecionamentos usando a diretiva error_page. O número de tais redirecionamentos é limitado. Permite o ajuste preciso das alocações de memória por requisição. Esta diretiva tem impacto mínimo na performance e geralmente não deve ser usada. Padrão http, server, location Habilita ou desabilita o reset de conexões que expiraram e conexões fechadas com o código não-padrão 444. O reset é realizado da seguinte forma. Antes de fechar um socket, a opção Nota conexões keep-alive são fechadas normalmente quando expiram. Padrão — http, server, location, upstream Configura servidores de nomes usados para resolver nomes de servidores upstream em endereços, por exemplo: O endereço pode ser especificado como um nome de domínio ou endereço IP, com uma porta opcional. Se a porta não for especificada, a porta 53 é usada. Os servidores de nomes são consultados em modo round-robin. Por padrão, o Angie faz cache das respostas usando o valor TTL de uma resposta. parâmetro opcional permite sobrescrever o período de validade do cache de resposta Por padrão, o Angie procurará tanto endereços IPv4 quanto IPv6 durante a resolução. desabilita a busca de endereços IPv4 desabilita a busca de endereços IPv6 parâmetro opcional;
habilita a coleta de métricas de solicitação e resposta do servidor DNS
(/status/resolvers/<zone>)
na zona especificada Dica Para prevenir spoofing de DNS, é recomendado usar servidores DNS em uma rede local confiável adequadamente protegida. Dica Ao executar no Docker, use o endereço do servidor DNS interno correspondente, como Define um timeout para resolução de nomes, por exemplo: Define o diretório raiz para solicitações. Por exemplo, com a seguinte configuração O arquivo O valor path pode conter variáveis, exceto $document_root e $realpath_root. Um caminho para o arquivo é construído simplesmente adicionando uma URI ao valor da diretiva root. Se uma URI precisa ser modificada, a diretiva alias deve ser usada. Permite acesso se todos ( Se a diretiva for definida com um valor diferente de zero, o Angie tentará minimizar o número de operações de envio nos sockets do cliente usando a flag Define um timeout para transmitir uma resposta ao cliente. O timeout é definido apenas entre duas operações de escrita sucessivas, não para a transmissão de toda a resposta. Se o cliente não receber nada dentro deste tempo, a conexão é fechada. Habilita ou desabilita o uso de aio pode ser usado para pré-carregar dados para Nesta configuração, Limita a quantidade de dados que pode ser transferida em uma única chamada Define a configuração para um servidor virtual. Não há separação clara entre servidores virtuais baseados em IP (baseados no endereço IP) e baseados em nome (baseados no campo de cabeçalho de solicitação "Host"). Em vez disso, as diretivas listen descrevem todos os endereços e portas que devem aceitar conexões para o servidor, e a diretiva server_name lista todos os nomes de servidor. Exemplos de configurações são fornecidos no documento Como o Angie processa uma solicitação. Define nomes de um servidor virtual, por exemplo: O primeiro nome torna-se o nome primário do servidor. Nomes de servidor podem incluir um asterisco ("*") substituindo a primeira ou última parte de um nome: Tais nomes são chamados de nomes curinga. Os dois primeiros nomes mencionados acima podem ser combinados em um: Também é possível usar expressões regulares em nomes de servidor, precedendo o nome com um til ("~"): Expressões regulares podem conter capturas que podem ser usadas posteriormente em outras diretivas: Grupos de captura nomeados em expressões regulares criam variáveis
que podem então ser usadas em outras diretivas: Nota Se a diretiva for definida como $hostname,
o nome do host do servidor web é usado. Você também pode especificar um nome de servidor vazio ( Ao procurar por um servidor virtual por um nome
que é correspondido por múltiplas opções
(por exemplo, tanto um curinga quanto uma expressão regular),
a primeira opção correspondente será selecionada na seguinte ordem de prioridade: nome exato; nome mais longo com um curinga no início, como nome mais longo com um curinga no final, como a primeira expressão regular correspondente (na ordem de aparição na configuração),
incluindo um nome vazio. Aviso Para fazer o Padrão http, server, location Habilita ou desabilita o uso do nome do servidor primário, especificado pela diretiva server_name, em redirecionamentos absolutos emitidos pelo Angie. o nome do servidor primário, especificado pela diretiva server_name, é usado o nome do campo de cabeçalho de requisição "Host" é usado. Se este campo não estiver presente, o endereço IP do servidor é usado. O uso de uma porta em redirecionamentos é controlado pela diretiva port_in_redirect. Padrão http Define o tamanho do bucket para as tabelas hash de nomes de servidor. O valor padrão depende do tamanho da linha de cache do processador. Os detalhes da configuração de tabelas hash são fornecidos em um documento separado. Define o tamanho máximo das tabelas hash de nomes de servidor. Os detalhes da configuração de tabelas hash são fornecidos em um documento separado. Padrão http, server, location Habilita ou desabilita a emissão da versão do Angie
em páginas de erro e no campo de cabeçalho de resposta Adicionado na versão 1.1.0: PRO No Angie PRO, se a diretiva define uma string, que também pode conter variáveis,
as páginas de erro e o campo de cabeçalho de resposta Padrão — server, location, if in location Aloca uma zona de memória compartilhada para coletar
métricas de /status/http/location_zones/<zone> e /status/http/server_zones/<zone>. Vários contextos A sintaxe com um único valor zone
combina todas as métricas para o contexto atual em uma zona de memória compartilhada: A sintaxe alternativa permite definir os seguintes parâmetros: key Uma string com variáveis, cujo valor determina o agrupamento de requisições na
zona. Todas as requisições que produzem valores idênticos após substituição
são agrupadas juntas. Se a substituição produzir um valor vazio,
as métricas não são atualizadas. zone O nome da zona de memória compartilhada. number (opcional) O número máximo de grupos separados para coletar métricas.
Se novos valores de key excederem este limite, eles são agrupados sob O valor padrão é 1. No exemplo a seguir,
todas as requisições que compartilham o mesmo valor As métricas resultantes são assim divididas entre hosts individuais na saída da API. Padrão http, server, location Define o tamanho do buffer usado para armazenar o corpo da resposta de uma subrequisição.
Por padrão, o tamanho do buffer é igual a uma página de memória. Isso é
Nota A diretiva é aplicável apenas para subrequisições com corpos de resposta salvos na memória. Por exemplo, tais subrequisições são criadas por SSI. Habilita ou desabilita o uso da opção Habilita ou desabilita o uso da opção de socket enviar o cabeçalho da resposta e o início de um arquivo em um pacote, no Linux e FreeBSD 4.*; enviar um arquivo em pacotes completos. Verifica a existência de arquivos na ordem especificada e usa o primeiro arquivo encontrado para o processamento da requisição; o processamento é realizado no contexto atual. O caminho para um arquivo é construído a partir do parâmetro file de acordo com as diretivas root e alias. É possível verificar a existência de um diretório especificando uma barra no final do nome, por exemplo O último parâmetro também pode apontar para um No exemplo a seguir, a diretiva E aqui, Padrão http, server, location Mapeia extensões de nomes de arquivo para tipos MIME de respostas. As extensões não diferenciam maiúsculas de minúsculas. Várias extensões podem ser mapeadas para um tipo, por exemplo: Uma tabela de mapeamento suficientemente completa é distribuída com o Angie e está localizada no arquivo Para fazer um Define o tamanho do bucket para as tabelas hash de tipos. Os detalhes da configuração de tabelas hash são discutidos separadamente. Define o tamanho máximo das tabelas hash de tipos. Os detalhes da configuração de tabelas hash são discutidos separadamente. Habilita ou desabilita o uso de sublinhados em campos de cabeçalho de requisição do cliente. Quando o uso de sublinhados está desabilitado, campos de cabeçalho de requisição cujos nomes contêm sublinhados são marcados como inválidos e estão sujeitos à diretiva ignore_invalid_headers. Se a diretiva for especificada no nível server, o valor do servidor padrão pode ser usado. Define o tamanho do bucket para a tabela hash de variáveis. Os detalhes da configuração de tabelas hash são discutidos separadamente. Define o tamanho máximo da tabela hash de variáveis. Os detalhes da configuração de tabelas hash são discutidos separadamente. O módulo versão do Angie argumento name na linha de requisição argumentos na linha de requisição endereço do cliente em forma binária, o comprimento do valor é sempre 4 bytes para endereços IPv4 ou 16 bytes para endereços IPv6 número de bytes enviados ao cliente, não contando o cabeçalho de resposta; esta variável é compatível com o parâmetro "%B" do módulo número de bytes enviados a um cliente número serial da conexão número atual de requisições feitas através de uma conexão tempo de conexão em segundos com resolução de milissegundos campo de cabeçalho de requisição campo de cabeçalho de requisição mesmo que $uri nesta ordem de precedência: nome do host da linha de requisição, ou nome do host do campo de cabeçalho de requisição "Host", ou o nome do servidor correspondente a uma requisição nome do host campo de cabeçalho de requisição arbitrário; a última parte do nome da variável corresponde ao nome do campo convertido para minúsculas com traços substituídos por sublinhados definir esta variável habilita limitação de taxa de resposta; veja limit_rate tempo atual em segundos com resolução de milissegundos PID do processo worker endereço do cliente do cabeçalho do protocolo PROXY O protocolo PROXY deve ser previamente habilitado definindo o parâmetro porta do cliente do cabeçalho do protocolo PROXY O protocolo PROXY deve ser previamente habilitado definindo o parâmetro endereço do servidor do cabeçalho do protocolo PROXY O protocolo PROXY deve ser previamente habilitado definindo o parâmetro porta do servidor do cabeçalho do protocolo PROXY O protocolo PROXY deve ser previamente habilitado definindo o parâmetro TLV do cabeçalho do protocolo PROXY. O name pode ser um nome de tipo TLV ou seu valor numérico. No último caso, o valor é hexadecimal e deve ser prefixado com TLVs SSL também podem ser acessados por nome de tipo TLV ou seu valor numérico, ambos prefixados por Os seguintes nomes de tipo TLV são suportados: Os seguintes nomes de tipo SSL TLV são suportados: Além disso, o seguinte nome de tipo SSL TLV especial é suportado: O protocolo PROXY deve ser previamente habilitado definindo o parâmetro mesmo que $args um nome de caminho absoluto correspondente ao valor da diretiva root ou alias para a requisição atual, com todos os links simbólicos resolvidos para caminhos reais endereço do cliente porta do cliente nome de usuário fornecido com a autenticação Basic linha de requisição original completa corpo da requisição O valor da variável é disponibilizado em localizações processadas pelas diretivas proxy_pass, fastcgi_pass, uwsgi_pass, e scgi_pass quando o corpo da requisição foi lido para um buffer de memória. Nome de um arquivo temporário com o corpo da requisição.
No final do processamento, o arquivo precisa ser removido. Para sempre escrever o corpo da requisição em um arquivo, habilite client_body_in_file_only. Ao passar o nome de um arquivo temporário em uma requisição proxy ou em uma requisição para um servidor FastCGI/uwsgi/SCGI, a passagem do próprio corpo da requisição deve ser desabilitada com as diretivas proxy_pass_request_body off, fastcgi_pass_request_body off, uwsgi_pass_request_body off, ou scgi_pass_request_body off, respectivamente. caminho do arquivo para a requisição atual, baseado nas diretivas root ou alias, e na URI da requisição identificador único da requisição gerado a partir de 16 bytes aleatórios, em hexadecimal comprimento da requisição (incluindo linha de requisição, cabeçalho e corpo da requisição) método da requisição, geralmente tempo de processamento da requisição em segundos com resolução de milissegundos; tempo decorrido desde que os primeiros bytes foram lidos do cliente URI completa original da requisição (com argumentos) esquema da requisição, "http" ou "https" campo de cabeçalho de resposta arbitrário; a última parte do nome da variável corresponde ao nome do campo convertido para minúsculas com traços substituídos por sublinhados campo arbitrário enviado no final da resposta; a última parte do nome da variável corresponde ao nome do campo convertido para minúsculas com traços substituídos por sublinhados Endereço do servidor que aceitou uma requisição. Calcular o valor da variável geralmente requer uma chamada de sistema. Para evitar uma chamada de sistema, as diretivas listen devem especificar endereços e usar o parâmetro nome do servidor que aceitou uma requisição porta do servidor que aceitou uma requisição protocolo da requisição, geralmente "HTTP/1.0", "HTTP/1.1", ou "HTTP/2.0" status da resposta hora local no formato padrão ISO 8601 hora local no formato Common Log Format informações sobre a conexão TCP do cliente; disponível em sistemas que suportam a opção de socket URI atual na requisição, normalizada. O valor de Diretivas#
absolute_redirect#
aio#
location /video/ {
aio on;
output_buffers 1 64k;
}
options VFS_AIO
kldload aio
location /video/ {
aio on;
directio 512;
output_buffers 1 128k;
}
location /video/ {
sendfile on;
aio on;
directio 8m;
}
location /video/ {
sendfile on;
aio threads;
}
aio threads=pool$disk;
--with-threads
. Atualmente, multi-threading é compatível apenas com os métodos epoll, kqueue, e eventport. Envio multi-threaded de arquivos é suportado apenas no Linux.aio_write#
aio threads
e é limitado a escrever arquivos temporários com dados recebidos de servidores proxy.alias#
location /i/ {
alias /data/w3/images/;
}
/i/top.gif
, o arquivo /data/w3/images/top.gif será enviado.alias
for usado dentro de uma localização definida com uma expressão regular, então tal expressão regular deve conter capturas e alias
deve referenciar essas capturas, por exemplo:location ~ ^/users/(.+\.(?:gif|jpe?g|png))$ {
alias /data/w3/images/$1;
}
location /images/ {
alias /data/w3/images/;
}
location /images/ {
root /data/w3;
}
auth_delay#
auto_redirect#
auto_redirect
[on
| off
| default
];auto_redirect default;
location /prefix/ {
auto_redirect on;
}
/prefix
causa um redirecionamento para /prefix/
.on
habilita explicitamente o redirecionamento,
enquanto off
o desabilita.
Quando definido como default
, o redirecionamento é habilitado apenas
se a localização processa requisições com api, proxy_pass,
fastcgi_pass, uwsgi_pass, scgi_pass, memcached_pass,
ou grpc_pass.chunked_transfer_encoding#
chunked_transfer_encoding
on
| off
;chunked_transfer_encoding on;
client#
client
para processar requisições HTTP internas
que o Angie executa por conta própria sem envolvimento de cliente externo.client
isola o tráfego de serviço
de vários módulos do Angie do tráfego de usuário,
permitindo controle adicional sobre ele.
Dentro deste contexto, apenas location`s nomeados
(com o prefixo :samp:`@
) podem ser definidos;
eles não são acessíveis para requisições HTTP externas
e só podem ser chamados programaticamente através de mecanismos internos do servidor.client
é usado para:location @acme
predefinido,
que pode ser adicionalmente configurado
usando diretivas do módulo Proxy;location @docker_events
predefinidos
e @docker_containers
,
que podem ser adicionalmente configurados
usando diretivas do módulo Proxy;remote_action
no módulo stream Upstream.client
permite agrupar configurações comuns para múltiplos blocos location
dentro de cada bloco,
o que ajuda a evitar duplicação de configuração.client
são herdadas apenas por blocos location
explicitamente declarados dentro dele.
Em particular, é por isso que elas não afetam a configuração de outros módulos
que implicitamente usam o bloco client
para requisições de saída
(por exemplo, ACME ou Docker).client
com herança de configurações:client {
proxy_set_header Host docker.example.com;
proxy_set_header Authorization "Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==";
location @docker_events {
}
location @docker_containers {
}
}
client {
upstream_probe_timeout 3s;
proxy_method GET;
proxy_set_header Host backend.example.com;
proxy_set_header X-Real-IP $remote_addr;
location @health_check {
proxy_pass http://upstream-server/health;
}
}
location`s regulares,
mas apenas manipuladores de conteúdo
(como :ref:`js_content
ou autoindex)
e manipuladores de variáveis (como map),
bem como diretivas que geram requisições por si mesmas,
como upstream_probe
, realmente funcionam.client_body_buffer_size#
client_body_buffer_size
size;client_body_buffer_size 8k|16k;
client_body_in_file_only#
client_body_in_file_only
on
| clean
| off
;client_body_in_file_only off;
on
clean
client_body_in_single_buffer#
client_body_in_single_buffer
on
| off
;client_body_in_single_buffer off;
client_body_temp_path#
client_body_temp_path
path [level1 [level2 [level3]]];client_body_temp_path client_body_temp;
(o caminho depende da opção de compilação --http-client-body-temp-path
)client_body_temp_path /spool/angie/client_temp 1 2;
/spool/angie/client_temp/7/45/00000123457
client_body_timeout#
client_header_buffer_size#
client_header_timeout#
client_max_body_size#
0
connection_pool_size#
connection_pool_size
size;connection_pool_size 256
| 512;
256
(bytes)512
(bytes)default_type#
directio#
O_DIRECT
(FreeBSD, Linux), da flag F_NOCACHE
(macOS), ou da função directio()
(Solaris), ao ler arquivos que são maiores ou iguais ao tamanho especificado. A diretiva automaticamente desabilita o uso de sendfile para uma determinada requisição. É recomendado para servir arquivos grandes:directio 4m;
directio_alignment#
disable_symlinks#
disable_symlinks
off
;disable_symlinks
on
| if_not_owner
[from=
part];disable_symlinks off;
off
on
if_not_owner
from=
parton
e if_not_owner
), todos os componentes do caminho são geralmente verificados. É possível pular a verificação de links simbólicos na parte inicial do caminho especificando adicionalmente o parâmetro from=part
. Neste caso, links simbólicos são verificados apenas a partir do componente do caminho que segue a parte inicial especificada. Se o valor não for uma parte inicial do caminho verificado, o caminho é verificado inteiramente, como se este parâmetro não tivesse sido especificado. Se o valor corresponder completamente ao nome do arquivo, links simbólicos não são verificados. Variáveis podem ser usadas no valor do parâmetro.disable_symlinks on from=$document_root;
openat()
e fstatat()
. Tais sistemas incluem versões modernas do FreeBSD, Linux e Solaris.on
e if_not_owner
adicionam sobrecarga de processamento.error_page#
error_page 404 /404.html;
error_page 500 502 503 504 /50x.html;
=response
, por exemplo:error_page 404 =200 /empty.gif;
error_page 404 = /404.php;
location
nomeado:location / {
error_page 404 = @fallback;
}
location @fallback {
proxy_pass http://backend;
}
error_page 403 http://example.com/forbidden.html;
error_page 404 =301 http://example.com/notfound.html;
etag#
ETag
para recursos estáticos.http#
if_modified_since#
if_modified_since
off
| exact
| before
;if_modified_since exact;
If-Modified-Since
:off
exact
before
If-Modified-Since
ignore_invalid_headers#
internal#
location
só pode ser usado para requisições internas. Para requisições externas, o erro de cliente 404 (Not Found) é retornado. Requisições internas são as seguintes:X-Accel-Redirect
de um servidor upstream;include virtual
do módulo SSI, pelas diretivas do módulo Addition, e pelas diretivas auth_request e mirror;error_page 404 /404.html;
location = /404.html {
internal;
}
rewrite or internal redirection cycle
pode ser vista no log de erro.keepalive_disable#
keepalive_disable
none
| browser ...;keepalive_disable msie6;
none
msie6
safari
keepalive_requests#
keepalive_time#
keepalive_timeout#
keepalive_timeout
timeout [header_timeout];keepalive_timeout 75s;
0
Keep‑Alive: timeout=time
na resposta. Os dois parâmetros podem diferir.Keep-Alive: timeout=time
é reconhecido pelo Mozilla e Konqueror. O MSIE fecha conexões keep-alive por si só em cerca de 60 segundos.large_client_header_buffers#
large_client_header_buffers
number size;large_client_header_buffers 4 8k;
limit_except#
GET
, HEAD
, POST
, PUT
, DELETE
,
MKCOL
, COPY
, MOVE
, OPTIONS
, PROPFIND
,
PROPPATCH
, LOCK
, UNLOCK
, ou PATCH
. Permitir o
método GET
também torna o método HEAD
permitido. O acesso a outros métodos
pode ser limitado usando as diretivas dos módulos Access e
Auth Basic:limit_except GET {
allow 192.168.1.0/32;
deny all;
}
GET
e HEAD
.limit_rate#
map $slow $rate {
1 4k;
2 8k;
}
limit_rate $rate;
server {
if ($slow) {
set $limit_rate 4k;
}
}
X-Accel-Limit-Rate
de uma resposta de servidor proxy. Esta capacidade pode ser desabilitada usando as diretivas proxy_ignore_headers, fastcgi_ignore_headers, uwsgi_ignore_headers, e scgi_ignore_headers.limit_rate_after#
limit_rate_after
size;limit_rate_after 0;
location /flv/ {
flv;
limit_rate_after 500k;
limit_rate 50k;
}
lingering_close#
on
always
off
lingering_time#
lingering_timeout#
lingering_timeout
.listen#
listen
address[:port] [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [setfib=
number] [fastopen=
number] [backlog=
number] [rcvbuf=
size] [sndbuf=
size] [accept_filter=
filter] [deferred
] [bind
] [ipv6only=
on
| off
] [reuseport
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen
port [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [setfib=
number] [fastopen=
number] [backlog=
number] [rcvbuf=
size] [sndbuf=
size] [accept_filter=
filter] [deferred
] [bind
] [ipv6only=
on
| off
] [reuseport
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen
unix:path [default_server
] [ssl
] [http2 | quic
] [proxy_protocol
] [backlog=
number] [rcvbuf=
size] [sndbuf=
size] [accept_filter=
filter] [deferred
] [bind
] [so_keepalive=
on|off|[keepidle
]:[samp:keepintvl]:[samp:keepcnt]];listen *:80
| *:8000;
listen 127.0.0.1:8000;
listen 127.0.0.1;
listen 8000;
listen *:8000;
listen localhost:8000;
listen [::]:8000;
listen [::1];
unix:
:listen unix:/var/run/angie.sock;
server
para essa porta
torna-se o servidor padrão para requisições com um cabeçalho Host
não correspondente.*:80
quando executado com privilégios de superusuário ou *:8000
caso contrário.default_server
default_server
,
o servidor padrão para o socket de escuta
será o primeiro servidor na configuração que serve este socket.ssl
http2
ssl
também deve ser especificado, mas o Angie também pode ser configurado para aceitar conexões HTTP/2 sem SSL.quic
quic
definido,
você também pode especificar reuseport
para que múltiplos processos worker possam ser usados.proxy_protocol
listen
também pode especificar vários parâmetros adicionais específicos para chamadas de sistema relacionadas a sockets. Estes parâmetros podem ser especificados em qualquer diretiva listen
, mas apenas uma vez para um determinado socket de escuta.setfib=
numberSO_SETFIB
) para o socket de escuta. Atualmente isso funciona apenas no FreeBSD.fastopen=
numberbacklog=
numberbacklog
na chamada listen()
que
limita o comprimento máximo da fila de conexões pendentes. Por
padrão, backlog é definido como -1 no FreeBSD, DragonFly BSD e macOS, e
como 511 em outras plataformas.rcvbuf=
sizeSO_RCVBUF
) para o
socket de escuta.sndbuf=
sizeSO_SNDBUF
) para o
socket de escuta.accept_filter=
filterSO_ACCEPTFILTER
) para
o socket de escuta que filtra conexões de entrada antes de passá-las
para accept()
. Isso funciona apenas no FreeBSD e NetBSD 5.0+.
Os valores possíveis são dataready
e httpready
.deferred
accept()
adiado (a
opção de socket TCP_DEFER_ACCEPT
) no Linux.bind
bind()
separada para um determinado par endereço:porta.
Isso é útil porque se houver várias diretivas listen
com a mesma porta mas endereços diferentes, e uma das
diretivas listen
escuta em todos os endereços para a
porta
dada (*:porta
), o Angie fará bind()
apenas para
*:porta
. Deve-se notar que a chamada de sistema getsockname()
será feita neste caso para determinar o endereço que aceitou a
conexão. Se os parâmetros setfib
, fastopen
, backlog
,
rcvbuf
, sndbuf
, accept_filter
, deferred
,
ipv6only
, reuseport
ou so_keepalive
forem
usados, então para um determinado par endereço:porta
uma chamada bind()
separada sempre será feita.ipv6only=on
| off
IPV6_V6ONLY
)
se um socket IPv6 escutando em um endereço curinga [::] aceitará
apenas conexões IPv6 ou tanto conexões IPv6 quanto IPv4. Este parâmetro
está ativado por padrão. Só pode ser definido uma vez na inicialização.reuseport
SO_REUSEPORT
no
Linux 3.9+ e DragonFly BSD, ou SO_REUSEPORT_LB
no FreeBSD 12+),
permitindo que o kernel distribua conexões de entrada entre processos
worker. Atualmente isso funciona apenas no Linux 3.9+, DragonFly BSD e
FreeBSD 12+.reuseport
pode ter implicações de segurança.multipath
quic
.so_keepalive=on
| off
| [keepidle
]:[samp:keepintvl]:[samp:keepcnt]''
on
SO_KEEPALIVE
é ativada para o socketoff
SO_KEEPALIVE
é desativada para o socketTCP_KEEPIDLE
, TCP_KEEPINTVL
e
TCP_KEEPCNT
. Em tais sistemas, eles podem ser configurados usando os
parâmetros keepidle
, keepintvl
e keepcnt
. Um ou dois
parâmetros podem ser omitidos, caso em que a configuração padrão do sistema para a
opção de socket correspondente estará em vigor. Por exemplo,so_keepalive=30m::10
TCP_KEEPIDLE
) para 30 minutos, deixará o intervalo de sonda (TCP_KEEPINTVL
) em seu padrão do sistema, e definirá a contagem de sondas (TCP_KEEPCNT
) para 10 sondas.listen 127.0.0.1 default_server accept_filter=dataready backlog=1024;
location#
location
pode ser definido por uma string de prefixo, ou por uma expressão
regular.~*
~
location
podem ser aninhados.^~
,
então as expressões regulares não são verificadas.=
, é possível definir uma correspondência exata de URI e
location. Se uma correspondência exata for encontrada, a busca termina. Por exemplo, se uma
requisição /
acontece frequentemente, definir location =/
acelerará
o processamento dessas requisições, pois a busca termina após a primeira comparação.
Tal location não pode conter locations aninhados, pois define uma correspondência exata.location =/ {
#configuração A
}
location / {
#configuração B
}
location /documents/ {
#configuração C
}
location ^~/images/ {
#configuração D
}
location ~*\.(gif|jpg|jpeg)$ {
#configuração E
}
/
corresponderá à configuração A,/index.html
corresponderá à configuração B,/documents/document.html
corresponderá à configuração C,/images/1.gif
corresponderá à configuração D,/documents/1.jpg
corresponderá à configuração E.location
termina com uma barra e
auto_redirect está habilitado, ocorre o seguinte:
Quando uma requisição chega com a URI que não possui barra final
mas que corresponde exatamente ao prefixo, um redirecionamento permanente com código 301
é retornado, apontando para a URI solicitada com a barra anexada.location /user/ {
proxy_pass http://user.example.com;
}
location =/user {
proxy_pass http://login.example.com;
}
@
define um location
nomeado. Tais localizações não são usadas para processamento regular de requisições,
mas são destinadas apenas para redirecionamento de requisições.
Elas não podem ser aninhadas e não podem conter localizações aninhadas.Localizações combinadas#
location
que definem blocos de configuração idênticos
podem ser compactados listando todas as suas expressões correspondentes em uma única
location
com um único bloco de configuração.
Isso é chamado de location
combinada.location
:location =/
^~/images/
~*\.(gif|jpg|jpeg)$ {
# configuração geral
}
location
nomeada também pode fazer parte da combinação:location =/
@named_combined {
#...
}
location
combinada não pode ter um espaço entre a expressão correspondente
e seu modificador.
Forma correta: location ~*/match(ing|es|er)$ ...
.location
combinada não pode conter imediatamente nem
proxy_pass
e diretivas similares com URI definido, nem api
ou
alias
. No entanto, essas diretivas podem ser usadas por localizações aninhadas
dentro de uma localização combinada.log_not_found#
log_subrequest#
max_headers#
400 (Bad Request)
é retornado.max_ranges#
0
merge_slashes#
//scripts/one.php
não corresponderialocation /scripts/ { }
/scripts/one.php
.msie_padding#
msie_refresh#
open_file_cache#
open_file_cache
off
;open_file_cache
max=
N [inactive=
time];open_file_cache off;
max
inactive
off
open_file_cache max=1000 inactive=20s;
open_file_cache_valid 30s;
open_file_cache_min_uses 2;
open_file_cache_errors on;
open_file_cache_errors#
open_file_cache_errors
on
| off
;open_file_cache_errors off;
open_file_cache_min_uses#
open_file_cache_min_uses
number;open_file_cache_min_uses 1;
inactive
da diretiva open_file_cache, necessário para que um descritor de arquivo permaneça aberto no cache.open_file_cache_valid#
output_buffers#
port_in_redirect#
postpone_output#
0
read_ahead#
posix_fadvise(0, 0, 0, POSIX_FADV_SEQUENTIAL)
é usada, e portanto o parâmetro size é ignorado.fcntl(O_READAHEAD,
size ), suportada desde FreeBSD 9.0-CURRENT, é usada.recursive_error_pages#
recursive_error_pages
on
| off
;recursive_error_pages off;
request_pool_size#
reset_timedout_connection#
reset_timedout_connection
on
| off
;reset_timedout_connection off;
SO_LINGER
é definida para ele com um valor de timeout de 0. Quando o socket é fechado, TCP RST é enviado para o cliente, e toda a memória associada com este socket é liberada. Isso ajuda a evitar manter um socket já fechado no estado FIN_WAIT1 com buffers preenchidos por muito tempo.resolver#
resolver
address ... [valid=
time] [ipv4=
on
| off
] [ipv6=
on
| off
] [status_zone=
zone];resolver 127.0.0.53 [::1]:5353;
valid
resolver 127.0.0.53 [::1]:5353 valid=30s;
ipv4=off
ipv6=off
status_zone
127.0.0.11
.resolver_timeout#
resolver_timeout 5s;
root#
location /i/ {
root /data/w3;
}
/data/w3/i/top.gif
será enviado em resposta à solicitação /i/top.gif
.satisfy#
all
) ou pelo menos um (any
) dos módulos Access, Auth Basic, ou Auth Request permitirem acesso.location / {
satisfy any;
allow 192.168.1.0/32;
deny all;
auth_basic "closed site";
auth_basic_user_file conf/htpasswd;
}
send_lowat#
NOTE_LOWAT
do método kqueue ou a opção de socket SO_SNDLOWAT
. Em ambos os casos, o tamanho especificado é usado.send_timeout#
sendfile#
sendfile()
.sendfile()
:location /video/ {
sendfile on;
tcp_nopush on;
aio on;
}
sendfile()
é chamado com a flag SF_NODISKIO
que faz com que não bloqueie na E/S do disco, mas, em vez disso, reporte que os dados não estão na memória. O Angie então inicia um carregamento assíncrono de dados lendo um byte. Na primeira leitura, o kernel do FreeBSD carrega os primeiros 128K bytes de um arquivo na memória, embora as próximas leituras carreguem apenas dados em blocos de 16K. Isso pode ser alterado usando a diretiva read_ahead.sendfile_max_chunk#
sendfile()
. Sem o limite, uma conexão rápida pode monopolizar completamente o processo worker.server#
server_name#
server {
server_name example.com www.example.com;
}
server {
server_name example.com *.example.com www.example.*;
}
server {
server_name .example.com;
}
server {
server_name ~^www\d+\.example\.com$ www.example.com;
}
server {
server_name ~^(www\.)?(.+)$;
location / {
root /sites/$2;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
server {
server_name ~^(www\.)?(?<domain>.+)$;
location / {
root /sites/$domain;
}
}
server {
server_name _;
location / {
root /sites/default;
}
}
""
):server {
server_name www.example.com "";
}
*.example.com
;mail.*
;server_name
funcionar com TLS,
você precisa terminar a conexão TLS.
A diretiva corresponde ao Host
em uma requisição HTTP,
então o handshake deve ser completado e a conexão descriptografada.server_name_in_redirect#
server_name_in_redirect
on
| off
;server_name_in_redirect off
;on
off
server_names_hash_bucket_size#
server_names_hash_bucket_size
size;server_names_hash_bucket_size 32
| 64
| 128;
server_names_hash_max_size#
server_tokens#
server_tokens
on
| off
| build
| string;server_tokens on;
Server
.
O parâmetro build
habilita a emissão do nome da build,
definido pelo respectivo parâmetro configure,
junto com a versão.Server
usarão o valor interpolado das variáveis da string
em vez do nome do servidor, versão e nome da build.
Uma string vazia desabilita a emissão do campo Server
.status_zone#
status_zone
off
| zone | key zone=
zone[:number];server
podem compartilhar a mesma zona para coleta de dados;
o valor especial off
desabilita a coleta de dados em blocos location
aninhados.server {
listen 80;
server_name *.example.com;
status_zone single;
# ...
}
zone
.$host
são agrupadas na host_zone
.
As métricas são rastreadas separadamente para cada $host
único
até que haja 10 grupos de métricas.
Uma vez que este limite seja atingido,
quaisquer valores $host
adicionais são incluídos sob a host_zone
:server {
listen 80;
server_name *.example.com;
status_zone $host zone=host_zone:10;
location / {
proxy_pass http://example.com;
}
}
subrequest_output_buffer_size#
subrequest_output_buffer_size
size;subrequest_output_buffer_size 4k
| 8k;
4K
ou 8K
, dependendo da plataforma. Pode ser feito menor,
no entanto.tcp_nodelay#
TCP_NODELAY
. A opção é habilitada quando uma conexão é transicionada para o estado keep-alive. Adicionalmente, é habilitada em conexões SSL, para proxy sem buffer, e para proxy WebSocket.tcp_nopush#
TCP_NOPUSH
no FreeBSD ou da opção de socket TCP_CORK
no Linux. As opções são habilitadas apenas quando sendfile é usado. Habilitar a opção permitetry_files#
$uri/
. Se nenhum dos arquivos for encontrado, um redirecionamento interno para o uri
especificado no último parâmetro é feito. Por exemplo:location /images/ {
try_files $uri /images/default.gif;
}
location = /images/default.gif {
expires 30s;
}
location
nomeado, como mostrado nos exemplos abaixo. O último parâmetro também pode ser um código:location / {
try_files $uri $uri/index.html $uri.html =404;
}
location / {
try_files $uri $uri/ @drupal;
}
try_files
é equivalente alocation / {
error_page 404 = @drupal;
log_not_found off;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ...
}
try_files
verifica a existência do arquivo PHP antes de passar a requisição para o servidor FastCGI.Exemplo em proxy Mongrel:
location / {
try_files /system/maintenance.html
$uri $uri/index.html $uri.html
@mongrel;
}
location @mongrel {
proxy_pass http://mongrel;
}
Exemplo para Drupal/FastCGI:
location / {
try_files $uri $uri/ @drupal;
}
location ~ \.php$ {
try_files $uri @drupal;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param QUERY_STRING $args;
# ... outros fastcgi_param
}
location @drupal {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
fastcgi_param SCRIPT_NAME /index.php;
fastcgi_param QUERY_STRING q=$uri&$args;
# ... outros fastcgi_param
}
Exemplo para Wordpress e Joomla:
location / {
try_files $uri $uri/ @wordpress;
}
location ~ \.php$ {
try_files $uri @wordpress;
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to$fastcgi_script_name;
# ... outros fastcgi_param
}
location @wordpress {
fastcgi_pass ...;
fastcgi_param SCRIPT_FILENAME /path/to/index.php;
# ... outros fastcgi_param
}
types#
types
{ ... }types text/html html; image/gif gif; image/jpeg jpg;
types {
application/octet-stream bin exe dll;
application/octet-stream deb;
application/octet-stream dmg;
}
conf/mime.types
.location
específico retornar o tipo MIME "application/octet-stream" para todas as respostas, a seguinte configuração pode ser usada:location /download/ {
types { }
default_type application/octet-stream;
}
types_hash_bucket_size#
types_hash_max_size#
underscores_in_headers#
variables_hash_bucket_size#
variables_hash_max_size#
Variáveis Integradas#
http_core
suporta variáveis integradas com nomes correspondentes às
variáveis do Apache Server. Em primeiro lugar, estas são variáveis que representam campos
de cabeçalho de requisição do cliente, como $http_user_agent
, $http_cookie
,
e assim por diante. Além disso, existem outras variáveis:$angie_version
#$arg_<name>
#$args
#$binary_remote_addr
#$body_bytes_sent
#mod_log_config
do Apache$bytes_sent
#$connection
#$connection_requests
#$connection_time
#$content_length
#Content-Length
$content_type
#Content-Type
$document_root
#$document_uri
#$host
#$hostname
#$http_<name>
#$https
#on
se a conexão opera em modo SSL, ou uma string vazia caso contrário$is_args
#?
se uma linha de requisição tem argumentos, ou uma string vazia caso contrário$limit_rate
#$msec
#$pid
#$pipe
#p
se a requisição foi pipelined, .
caso contrário$proxy_protocol_addr
#proxy_protocol
na diretiva listen.$proxy_protocol_port
#proxy_protocol
na diretiva listen.$proxy_protocol_server_addr
#proxy_protocol
na diretiva listen.$proxy_protocol_server_port
#proxy_protocol
na diretiva listen.$proxy_protocol_tlv_<name>
#0x
:$proxy_protocol_tlv_alpn
$proxy_protocol_tlv_0x01
ssl_
:$proxy_protocol_tlv_ssl_version
$proxy_protocol_tlv_ssl_0x21
alpn (0x01)
- protocolo de camada superior usado sobre a conexãoauthority (0x02)
- valor do nome do host passado pelo clienteunique_id (0x05)
- id único da conexãonetns (0x30)
- nome do namespacessl (0x20)
- estrutura TLV SSL bináriassl_version (0x21)
- versão SSL usada na conexão do clientessl_cn (0x22)
- Nome Comum do certificado SSLssl_cipher (0x23)
- nome da cifra usadassl_sig_alg (0x24)
- algoritmo usado para assinar o certificadossl_key_alg (0x25)
- algoritmo de chave públicassl_verify
- resultado da verificação do certificado SSL do cliente: 0
se o cliente apresentou um certificado e foi verificado com sucesso, diferente de zero caso contrárioproxy_protocol
na diretiva listen.$query_string
#$realpath_root
#$remote_addr
#$remote_port
#$remote_user
#$request
#$request_body
#$request_body_file
#$request_completion
#OK
se uma requisição foi completada, ou uma string vazia caso contrário$request_filename
#$request_id
#$request_length
#$request_method
#GET
ou POST
$request_time
#$request_uri
#$scheme
#$sent_http_<name>
#$sent_trailer_<name>
#$server_addr
#bind
.$server_name
#$server_port
#$server_protocol
#$status
#$time_iso8601
#$time_local
#$tcpinfo_rtt, $tcpinfo_rttvar, $tcpinfo_snd_cwnd, $tcpinfo_rcv_space
#TCP_INFO
$uri
#$uri
pode mudar durante o processamento da requisição, por exemplo, ao fazer redirecionamentos internos, ou ao usar arquivos de índice.