Proxy#

Permite passar requisições para outro servidor (com proxy).

Ao compilar a partir do código-fonte, o módulo é compilado por padrão; ele pode ser desabilitado com a opção de compilação --without-http_proxy_module.

Em pacotes e imagens de nossos repositórios, o módulo está incluído na compilação.

Exemplo de configuração#

location / {
    proxy_pass       http://localhost:8000;
    proxy_set_header Host      $host;
    proxy_set_header X-Real-IP $remote_addr;

    proxy_cache       cache_zone;
    proxy_cache_valid 200 302 10m;
    proxy_cache_valid 404      1m;
}

Diretivas#

proxy_bind#

Sintaxe

proxy_bind address [transparent] | off;

Padrão

—

Contexto

http, server, location

Faz com que conexões de saída para um servidor com proxy se originem do endereço IP local especificado com uma porta opcional. O valor do parâmetro pode conter variáveis. O valor especial off cancela o efeito da diretiva proxy_bind herdada do nível de configuração anterior, o que permite ao sistema atribuir automaticamente o endereço IP local e a porta.

Por padrão, esse valor é avaliado uma vez, quando a requisição é inicializada, antes de um servidor com proxy ser selecionado. No Angie PRO, a avaliação ocorre após cada seleção de servidor com proxy (incluindo novas tentativas), de modo que o endereço de vinculação pode depender do servidor selecionado; por exemplo, via variável $upstream_current_addr. Se o valor avaliado estiver vazio, nenhuma vinculação é feita.

O parâmetro transparent permite que conexões de saída para um servidor com proxy se originem de um endereço IP não-local, por exemplo, de um endereço IP real de um cliente:

proxy_bind $remote_addr transparent;

Para que este parâmetro funcione, geralmente é necessário executar os processos worker do Angie com privilégios de superusuário. No Linux isso não é necessário, pois se o parâmetro transparent for especificado, os processos worker herdam a capacidade CAP_NET_RAW do processo mestre.

Nota

É necessário configurar a tabela de roteamento do kernel para interceptar o tráfego de rede do servidor com proxy.

proxy_buffer_size#

Sintaxe

proxy_buffer_size tamanho;

Padrão

proxy_buffer_size 4k|8k;

Contexto

http, server, location

Define o tamanho do buffer usado para ler a primeira parte da resposta recebida do servidor com proxy. Esta parte geralmente contém um pequeno cabeçalho de resposta. Por padrão, o tamanho do buffer é igual a uma página de memória. Isso é 4K ou 8K, dependendo da plataforma. Pode ser feito menor, no entanto.

proxy_buffering#

Sintaxe

proxy_buffering on | off;

Padrão

proxy_buffering on;

Contexto

http, server, location

Habilita ou desabilita o buffering de respostas do servidor com proxy.

on

O Angie envia a resposta ao cliente em paralelo com a leitura a partir do servidor com proxy; o cliente não espera pela resposta inteira. A resposta é lida nos buffers definidos pelas diretivas proxy_buffer_size e proxy_buffers. Um buffer é passado para envio assim que é completamente preenchido, e o tamanho total dos buffers ocupados enviando é limitado por proxy_busy_buffers_size. Um buffer parcialmente preenchido aguarda até ser preenchido ou a resposta terminar, portanto os dados normalmente chegam ao cliente em buffers completos. Por isso, as respostas que precisam chegar ao cliente à medida que são produzidas exigem off. Parte da resposta é escrita em um arquivo temporário no disco quando todos os buffers estão cheios e o cliente lê mais lentamente do que o servidor com proxy envia. Respostas que são cacheadas ou armazenadas em disco sempre passam por um arquivo temporário. A escrita em arquivos temporários é controlada pelas diretivas proxy_max_temp_file_size e proxy_temp_file_write_size. O buffering libera o servidor com proxy assim que ele enviou toda a sua resposta, em vez de manter a conexão com ele pelo tempo que um cliente lento leva para ler.

off

Cada porção de dados lida do servidor com proxy é passada para o cliente imediatamente, sem tamanho mínimo: 10 bytes lidos de um buffer de 4K são enviados imediatamente. O Angie usa um único buffer, definido pela diretiva proxy_buffer_size, portanto lê no máximo esse tamanho por vez. Nenhum arquivo temporário é usado, portanto as respostas não são cacheadas nem armazenadas em disco, e nem proxy_limit_rate nem limit_rate têm efeito. off é adequado para respostas que precisam chegar ao cliente à medida que são produzidas: Server-Sent Events, long polling e streaming.

O buffering também pode ser habilitado ou desabilitado passando "yes" ou "no" no campo de cabeçalho de resposta X-Accel-Buffering. Esta capacidade pode ser desabilitada usando a diretiva proxy_ignore_headers.

proxy_buffers#

Sintaxe

proxy_buffers number tamanho;

Padrão

proxy_buffers 8 4k | 8k;

Contexto

http, server, location

Define o número e tamanho dos buffers usados para ler uma resposta do servidor com proxy, para uma única conexão.

Por padrão, o tamanho do buffer é igual a uma página de memória. Isso é 4K ou 8K, dependendo da plataforma.

proxy_busy_buffers_size#

Sintaxe

proxy_busy_buffers_size tamanho;

Padrão

proxy_busy_buffers_size 8k | 16k;

Contexto

http, server, location

Quando o buffering de respostas do servidor com proxy está habilitado, limita o tamanho total dos buffers que podem estar ocupados enviando uma resposta para o cliente enquanto a resposta ainda não foi totalmente lida. Enquanto isso, o resto dos buffers pode ser usado para ler a resposta e, se necessário, fazer buffer de parte da resposta em um arquivo temporário.

Por padrão, o tamanho é limitado pelo tamanho de dois buffers definidos pelas diretivas proxy_buffer_size e proxy_buffers.

proxy_cache#

Sintaxe

proxy_cache zone | off [path=path];

Padrão

proxy_cache off;

Contexto

http, server, location

Define uma zona de memória compartilhada usada para cache. A mesma zona pode ser usada em vários lugares. O valor do parâmetro pode conter variáveis.

off

desabilita o cache herdado do nível de configuração anterior.

No Angie PRO, você pode especificar múltiplas diretivas proxy_cache_path que usam o mesmo valor keys_zone para habilitar fragmentação de cache. Ao fazer isso, você deve definir o parâmetro path da diretiva proxy_cache que usa este valor keys_zone:

path=path

O valor é avaliado no momento de fazer cache da resposta do backend e espera-se que use variáveis, incluindo aquelas contendo informações da resposta.

Se a resposta for retirada do cache, o path não é reavaliado; assim, uma resposta em cache mantém seu path original até ser removida do cache.

Isso permite selecionar o caminho de cache necessário aplicando diretivas map ou scripts às respostas do backend. Exemplo para Content-Type:

proxy_cache_path /cache/one keys_zone=zone:10m;
proxy_cache_path /cache/two keys_zone=zone;

map $upstream_http_content_type $cache {
   ~^text/  one;
   default  two;
}

server {
   ...
   location / {
       proxy_pass http://backend;
       proxy_cache zone path=/cache/$cache;
       proxy_cache_valid 200 10m;
   }
}

Aqui há dois caminhos de cache e um mapeamento de variável para distinguir entre eles. Se Content-Type começar com text/, o primeiro caminho será escolhido, caso contrário o segundo.

Nota

Ao usar proxy_cache, você normalmente precisa também definir a diretiva proxy_cache_valid para especificar explicitamente o tempo de cache para respostas. Se não for definida, o Angie não usa valores padrão mas determina o tempo de cache da resposta baseado nos cabeçalhos de resposta HTTP do servidor na seguinte ordem de prioridade:

  1. O cabeçalho X-Accel-Expires (maior prioridade).

  2. O cabeçalho Cache-Control com parâmetros max-age ou s-maxage.

  3. O cabeçalho Expires.

Se nenhum desses cabeçalhos contiver valores válidos ou não estiver presente, a resposta não será armazenada em cache porque seu tempo de expiração não pode ser determinado.

proxy_cache_background_update#

Sintaxe

proxy_cache_background_update on | off;

Padrão

proxy_cache_background_update off;

Contexto

http, server, location

Permite iniciar uma sub-requisição em segundo plano para atualizar um item de cache expirado, enquanto uma resposta em cache obsoleta é retornada ao cliente.

Aviso

O uso de uma resposta em cache obsoleta enquanto está sendo atualizada deve ser permitido.

proxy_cache_bypass#

Sintaxe

proxy_cache_bypass string ...;

Padrão

—

Contexto

http, server, location

Define condições sob as quais a resposta não será retirada do cache. Se pelo menos um valor dos parâmetros de string não estiver vazio e não for igual a "0", então a resposta não será retirada do cache:

proxy_cache_bypass $cookie_nocache $arg_nocache$arg_comment;
proxy_cache_bypass $http_pragma    $http_authorization;

Os valores dos parâmetros podem conter variáveis.

Pode ser usada junto com a diretiva proxy_no_cache.

proxy_cache_convert_head#

Sintaxe

proxy_cache_convert_head on | off;

Padrão

proxy_cache_convert_head on;

Contexto

http, server, location

Habilita ou desabilita a conversão do método "HEAD" para "GET" para cache. Se a conversão estiver desabilitada, a chave de cache deve incluir o $request_method.

proxy_cache_key#

Sintaxe

proxy_cache_key string;

Padrão

proxy_cache_key $scheme$proxy_host$request_uri;

Contexto

http, server, location

Define uma chave para cache. A chave pode conter variáveis. Por exemplo,

proxy_cache_key "$host$request_uri $cookie_user";

Por padrão, o valor da diretiva é próximo à string

proxy_cache_key $scheme$proxy_host$uri$is_args$args;

proxy_cache_lock#

Sintaxe

proxy_cache_lock on | off;

Padrão

proxy_cache_lock off;

Contexto

http, server, location

Quando habilitado, apenas uma requisição por vez será permitida para popular um novo elemento de cache identificado de acordo com a diretiva proxy_cache_key passando uma requisição para o servidor com proxy. Outras requisições para o mesmo elemento de cache irão aguardar uma resposta aparecer no cache ou para o bloqueio de cache para este elemento ser liberado, até o tempo definido pela diretiva proxy_cache_lock_timeout.

proxy_cache_lock_age#

Sintaxe

proxy_cache_lock_age tempo;

Padrão

proxy_cache_lock_age 5s;

Contexto

http, server, location

Se a última requisição passada para o servidor com proxy para popular um novo elemento de cache não foi completada pelo tempo especificado, mais uma requisição pode ser passada para o servidor com proxy.

proxy_cache_lock_timeout#

Sintaxe

proxy_cache_lock_timeout tempo;

Padrão

proxy_cache_lock_timeout 5s;

Contexto

http, server, location

Define um timeout para proxy_cache_lock. Quando o tempo expira, a requisição será passada para o servidor com proxy, porém, a resposta não será armazenada em cache.

proxy_cache_max_range_offset#

Sintaxe

proxy_cache_max_range_offset number;

Padrão

—

Contexto

http, server, location

Define um deslocamento em bytes para requisições de intervalo de bytes. Se o intervalo estiver além do deslocamento especificado, a requisição de intervalo será passada para o servidor com proxy e a resposta não será armazenada em cache.

proxy_cache_methods#

Sintaxe

proxy_cache_methods GET | HEAD | POST ...;

Padrão

proxy_cache_methods GET HEAD;

Contexto

http, server, location

Se o método de requisição do cliente estiver listado nesta diretiva, então a resposta será armazenada em cache. Os métodos "GET" e "HEAD" são sempre adicionados à lista, mas é recomendado especificá-los explicitamente. Veja também a diretiva proxy_no_cache.

proxy_cache_min_uses#

Sintaxe

proxy_cache_min_uses number;

Padrão

proxy_cache_min_uses 1;

Contexto

http, server, location

Define o número de requisições após as quais a resposta será armazenada em cache.

Aviso

Metadados de cache são armazenados em memória compartilhada. Deletar arquivos de cache manualmente não reseta os contadores e pode levar a comportamento imprevisível. Para um reset completo, pare o servidor, delete o diretório de cache e inicie novamente.

Nota

Módulos de limpeza de cache de terceiros (por exemplo, Cache Purge) apenas deletam arquivos mas não resetam o contador proxy_cache_min_uses. A diretiva é destinada a proteger o cache de poluição por requisições infrequentes, e resetar o contador na limpeza pode afetar negativamente o desempenho.

proxy_cache_path#

Sintaxe

proxy_cache_path path [levels=levels] [use_temp_path=on | off] keys_zone=name:size[:file=file] [inactive=time] [max_size=size] [min_free=size] [manager_files=number] [manager_sleep=time] [manager_threshold=time] [loader_files=number] [loader_sleep=time] [loader_threshold=time];

Padrão

—

Contexto

http

Define o path e outros parâmetros de um cache. Os dados de cache são armazenados em arquivos. O nome do arquivo em um cache é resultado da aplicação da função MD5 à chave de cache.

levels

define níveis de hierarquia de um cache: de 1 a 3, cada nível aceita valores 1 ou 2.

Por exemplo, na seguinte configuração:

proxy_cache_path /data/angie/cache levels=1:2 keys_zone=one:10m;

nomes de arquivo em um cache ficarão assim:

/data/angie/cache/c/29/b7f54b2df7773722d382f4809d65029c

Uma resposta em cache é primeiro escrita em um arquivo temporário, e então o arquivo é renomeado. Arquivos temporários e o cache podem ser colocados em sistemas de arquivos diferentes. Porém, esteja ciente de que neste caso um arquivo é copiado entre dois sistemas de arquivos ao invés da operação barata de renomeação. É assim recomendado que para qualquer localização dada tanto o cache quanto um diretório contendo arquivos temporários sejam colocados no mesmo sistema de arquivos.

use_temp_path=on | off

determina o diretório a ser usado para arquivos temporários

    on

Se o parâmetro não for especificado ou definido como on, o diretório especificado pela diretiva proxy_temp_path para a location dada será usado

    off

arquivos temporários serão colocados diretamente no diretório de cache

keys_zone

Define o nome e tamanho da zona de memória compartilhada para armazenar todas as chaves ativas e informações sobre dados. Metadados de cache são armazenados em memória compartilhada.

O tamanho da zona é especificado em bytes e deve ser de pelo menos duas páginas de memória do sistema. Os sufixos k e m também são aceitos; diferentemente de max_size, este parâmetro não aceita g.

Uma zona de 1 megabyte é suficiente para armazenar cerca de 8000 chaves.

Quando um file opcional é especificado com keys_zone, o Angie descarrega o conteúdo desta zona para o disco quando o processo principal termina e tenta restaurá-la no mesmo endereço de memória na próxima inicialização ou após atualização binária, para garantir persistência de dados mais confiável e reduzir o tempo de carregamento do cache.

Se a zona não puder ser restaurada devido a uma mudança em seu tamanho, incompatibilidade de versão binária, ou outras razões, o Angie registrará um aviso (failed to restore zone at address) e não usará o mecanismo de restauração de zona. Em vez disso, o arquivo incompatível será renomeado para .old; você pode deletá-lo, ou restaurar seu nome e reverter o Angie para a configuração e versão na qual este arquivo foi originalmente criado.

Aviso

Certifique-se de que o caminho para o file está especificado corretamente e tem as permissões de acesso necessárias para o Angie usar, e está protegido de acesso não autorizado; caminhos relativos são baseados no prefix.

inactive

Se dados de cache não forem acessados dentro do tempo definido por este parâmetro, eles são removidos, independentemente de sua atualidade; cada acesso reinicia este temporizador. Isso difere da remoção baseada em tamanho realizada pelo gerenciador de cache descrito abaixo: a remoção por inatividade ocorre mesmo quando o cache está abaixo de max_size, e ignora os períodos de validade configurados com a diretiva proxy_cache_valid.

Por padrão, inactive é 10 minutos.

Nota

No Angie PRO, múltiplas diretivas proxy_cache_path podem ser especificadas com o mesmo valor keys_zone. O tamanho da zona de memória compartilhada só pode ser especificado na primeira. A seleção entre diretivas será feita com base no parâmetro path da diretiva proxy_cache correspondente.

Um processo especial gerenciador de cache monitora o tamanho máximo do cache e a quantidade mínima de espaço livre no sistema de arquivos com o cache, e remove os dados menos recentemente usados quando o tamanho máximo do cache é excedido ou quando não há espaço livre suficiente. A remoção de dados ocorre em iterações.

max_size

valor limite máximo para o tamanho do cache

O valor é especificado em bytes; os sufixos k, m e g também são aceitos. Por padrão, o tamanho do cache não é limitado.

min_free

valor limite mínimo para espaço livre no sistema de arquivos com o cache

O valor é especificado nas mesmas unidades que max_size. O valor padrão 0 desabilita o monitoramento de espaço livre.

Em plataformas que não suportam consultar estatísticas do sistema de arquivos, o parâmetro é ignorado, e o Angie registra o aviso min_free is not supported on this platform, ignored.

manager_files

número máximo de itens de cache a serem removidos em uma iteração

Por padrão: 100.

manager_threshold

limita a duração de uma iteração

Por padrão: 200 milissegundos.

manager_sleep

configura uma pausa entre iterações

Por padrão: 50 milissegundos.

Um minuto após o Angie iniciar, um processo especial carregador de cache é ativado. Ele examina o sistema de arquivos em busca de dados previamente armazenados em cache e carrega essas informações na zona de cache. Este processo funciona iterativamente; cada iteração processa um número limitado de itens especificado pelo parâmetro loader_files, garante que não exceda loader_threshold, então faz uma pausa curta definida por loader_sleep antes de passar para o próximo lote. As iterações continuam até que o carregador tenha processado todas as entradas de cache existentes no disco:

loader_files

número máximo de itens de cache a carregar em uma iteração

Por padrão: 100

loader_threshold

limita a duração de uma iteração

Por padrão: 200 milissegundos

loader_sleep

configura uma pausa entre iterações

Por padrão: 50 milissegundos

Nota

Especificar o file para o parâmetro keys_zone não afeta a operação do carregador de cache.

proxy_cache_revalidate#

Sintaxe

proxy_cache_revalidate on | off;

Padrão

proxy_cache_revalidate off;

Contexto

http, server, location

Habilita a revalidação de itens de cache expirados usando requisições condicionais com os campos de cabeçalho If-Modified-Since e If-None-Match.

proxy_cache_use_stale#

Sintaxe

proxy_cache_use_stale error | timeout | invalid_header | updating | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;

Padrão

proxy_cache_use_stale off;

Contexto

http, server, location

Determina em quais casos uma resposta de cache obsoleta pode ser usada. Os parâmetros da diretiva correspondem aos da diretiva proxy_next_upstream.

error

permite usar uma resposta de cache obsoleta se um servidor proxy para processar uma requisição não puder ser selecionado.

updating

parâmetro adicional, permite usar uma resposta de cache obsoleta se ela estiver sendo atualizada no momento. Isso permite minimizar o número de acessos aos servidores proxy ao atualizar dados em cache.

non_idempotent

permite usar uma resposta de cache obsoleta se uma requisição com um método não-idempotente já tiver sido enviada a um servidor proxy e a comunicação com esse servidor falhar por qualquer motivo; dos métodos não-idempotentes apenas POST pode ser armazenado em cache, e proxy_cache_methods deve habilitá-lo.

Usar uma resposta de cache obsoleta também pode ser habilitado diretamente no cabeçalho da resposta por um número especificado de segundos após a resposta ter se tornado obsoleta:

  • A extensão stale-while-revalidate do campo de cabeçalho Cache-Control permite usar uma resposta de cache obsoleta se ela estiver sendo atualizada no momento.

  • A extensão stale-if-error do campo de cabeçalho Cache-Control permite usar uma resposta de cache obsoleta em caso de erro.

Nota

Isso tem prioridade menor que usar os parâmetros da diretiva.

Para minimizar o número de acessos aos servidores proxy ao popular um novo elemento de cache, a diretiva proxy_cache_lock pode ser usada.

proxy_cache_valid#

Sintaxe

proxy_cache_valid [code ... | any] tempo;

Padrão

—

Contexto

http, server, location

Define o tempo de cache para diferentes códigos de resposta. Por exemplo, as diretivas

proxy_cache_valid 200 302 10m;
proxy_cache_valid 404      1m;

definem 10 minutos de cache para respostas com códigos 200 e 302 e 1 minuto para respostas com código 404.

Se apenas o tempo de cache for especificado,

proxy_cache_valid 5m;

então apenas respostas 200, 301 e 302 são armazenadas em cache.

Além disso, o parâmetro any pode ser especificado para armazenar em cache qualquer resposta:

proxy_cache_valid 200 302 10m;
proxy_cache_valid 301      1h;
proxy_cache_valid any      1m;

Nota

Parâmetros de cache também podem ser definidos diretamente no cabeçalho da resposta. Isso tem prioridade maior que a definição do tempo de cache usando a diretiva.

  • O campo de cabeçalho X-Accel-Expires define o tempo de cache de uma resposta em segundos. O valor zero desabilita o cache para uma resposta. Se o valor começar com o prefixo @, ele define um tempo absoluto em segundos desde a Época, até o qual a resposta pode ser armazenada em cache.

  • Se o cabeçalho não incluir o campo X-Accel-Expires, parâmetros de cache podem ser definidos nos campos de cabeçalho Expires ou Cache-Control.

  • Se o cabeçalho incluir o campo Set-Cookie, tal resposta não será armazenada em cache.

  • Se o cabeçalho incluir o campo Vary com o valor especial "*", tal resposta não será armazenada em cache. Se o cabeçalho incluir o campo Vary com outro valor, tal resposta será armazenada em cache levando em conta os campos de cabeçalho de requisição correspondentes.

O processamento de um ou mais desses campos de cabeçalho de resposta pode ser desabilitado usando a diretiva proxy_ignore_headers.

proxy_connect_timeout#

Sintaxe

proxy_connect_timeout tempo;

Padrão

proxy_connect_timeout 60s;

Contexto

http, server, location

Define um timeout para estabelecer uma conexão com um servidor proxy. Deve-se notar que este timeout geralmente não pode exceder 75 segundos.

Nota

Este timeout não rege as conexões ociosas: por quanto tempo uma conexão já aberta é mantida para reutilização é definido por keepalive_timeout em um bloco upstream cujas conexões são armazenadas em cache com keepalive.

proxy_connection_drop#

Sintaxe

proxy_connection_drop tempo | on | off;

Padrão

proxy_connection_drop off;

Contexto

http, server, location

Habilita o encerramento de todas as conexões ativas com o servidor proxy após ele ter sido removido do grupo ou marcado como permanentemente indisponível por um processo de reresolve ou pelo comando da API DELETE. As conexões ociosas no cache não são afetadas.

Uma conexão é encerrada quando o próximo evento de leitura ou escrita é processado para o cliente ou o servidor proxy.

Definir time habilita um timeout de encerramento de conexão; com on definido, as conexões são descartadas imediatamente.

proxy_force_ranges#

Sintaxe

proxy_force_ranges on | off;

Padrão

proxy_force_ranges off;

Contexto

http, server, location

Habilita o suporte a byte-range tanto para respostas em cache quanto não em cache do servidor proxy, independentemente do campo Accept-Ranges nessas respostas.

proxy_headers_hash_bucket_size#

Sintaxe

proxy_headers_hash_bucket_size tamanho;

Padrão

proxy_headers_hash_bucket_size 64;

Contexto

http, server, location

Define o tamanho do bucket para tabelas hash usadas pelas diretivas proxy_hide_header e proxy_set_header. Os detalhes da configuração de tabelas hash são fornecidos separadamente.

proxy_headers_hash_max_size#

Sintaxe

proxy_headers_hash_max_size tamanho;

Padrão

proxy_headers_hash_max_size 512;

Contexto

http, server, location

Define o tamanho máximo das tabelas hash usadas pelas diretivas proxy_hide_header e proxy_set_header. Os detalhes da configuração de tabelas hash são fornecidos separadamente.

proxy_hide_header#

Sintaxe

proxy_hide_header field;

Padrão

—

Contexto

http, server, location

Por padrão, o Angie não passa os campos de cabeçalho Date, Server, X-Pad e X-Accel-... da resposta de um servidor proxy para um cliente. A diretiva proxy_hide_header define campos adicionais que não serão passados. Se, ao contrário, a passagem de campos precisar ser permitida, a diretiva proxy_pass_header pode ser usada.

proxy_http3_hq#

Sintaxe

proxy_http3_hq on | off;

Padrão

proxy_http3_hq off;

Contexto

http, server, location

Alterna o modo especial de negociação hq-interop, que é usado para testes de interoperabilidade QUIC nos quais o Angie se baseia.

Aviso

Habilite este modo apenas para executar testes especializados que explicitamente o exigem.

proxy_http3_max_concurrent_streams#

Sintaxe

proxy_http3_max_concurrent_streams number;

Padrão

proxy_http3_max_concurrent_streams 128;

Contexto

http, server, location

Inicializa as configurações HTTP/3 e QUIC e define o número máximo de streams de requisição HTTP/3 concorrentes em uma conexão. Requer habilitar conexões keepalive.

proxy_http3_max_table_capacity#

Sintaxe

proxy_http3_max_table_capacity number;

Padrão

proxy_http3_max_table_capacity 4096;

Contexto

http, server, location

Define a capacidade da tabela dinâmica para conexões proxy.

Nota

Uma diretiva similar http3_max_table_capacity define este valor para conexões de servidor. Para evitar erros, o uso da tabela dinâmica é desabilitado quando o cache está habilitado no modo proxy.

proxy_http3_stream_buffer_size#

Sintaxe

proxy_http3_stream_buffer_size tamanho;

Padrão

proxy_http3_stream_buffer_size 64k;

Contexto

http, server, location

Define o tamanho do buffer usado para leitura e escrita de streams QUIC.

proxy_http_version#

Sintaxe

proxy_http_version 1.0 | 1.1 | 2 | 3;

Padrão

proxy_http_version 1.1;

Contexto

http, server, location, if in location, limit_except

Define a versão do protocolo HTTP para proxy. A versão 1.1 ou superior é recomendada para uso com conexões keepalive.

proxy_ignore_client_abort#

Sintaxe

proxy_ignore_client_abort on | off;

Padrão

proxy_ignore_client_abort off;

Contexto

http, server, location

Determina se a conexão com um servidor proxy deve ser fechada quando um cliente fecha a conexão sem aguardar uma resposta.

proxy_ignore_headers#

Sintaxe

proxy_ignore_headers campo ...;

Padrão

—

Contexto

http, server, location

Desabilita o processamento de certos campos de cabeçalho de resposta do servidor proxy. Os seguintes campos podem ser ignorados: X-Accel-Redirect, X-Accel-Expires, X-Accel-Limit-Rate, X-Accel-Buffering, X-Accel-Charset, Expires, Cache-Control, Set-Cookie, e Vary.

Se não desabilitado, o processamento desses campos de cabeçalho tem o seguinte efeito:

  • X-Accel-Expires, Expires, Cache-Control, Set-Cookie e Vary definem os parâmetros de cache da resposta;

  • X-Accel-Redirect executa um redirecionamento interno para o URI especificado ou location nomeado;

  • X-Accel-Limit-Rate define o limite de taxa para transmissão de uma resposta para um cliente;

  • X-Accel-Buffering habilita ou desabilita o buffering de uma resposta;

  • X-Accel-Charset define o charset desejado de uma resposta.

proxy_intercept_errors#

Sintaxe

proxy_intercept_errors on | off;

Padrão

proxy_intercept_errors off;

Contexto

http, server, location

Determina se respostas proxy com códigos maiores ou iguais a 300 devem ser passadas para um cliente ou serem interceptadas e redirecionadas para o Angie para processamento com a diretiva error_page.

proxy_limit_rate#

Sintaxe

proxy_limit_rate taxa;

Padrão

proxy_limit_rate 0;

Contexto

http, server, location

Limita a velocidade de leitura da resposta do servidor proxy. A taxa é especificada em bytes por segundo e pode conter variáveis.

0

desabilita a limitação de taxa

Nota

O limite é definido por requisição, então se o Angie abrir simultaneamente duas conexões para o servidor proxy, a taxa geral será duas vezes maior que o limite especificado. A limitação funciona apenas se o buffering de respostas do servidor proxy estiver habilitado.

proxy_max_temp_file_size#

Sintaxe

proxy_max_temp_file_size tamanho;

Padrão

proxy_max_temp_file_size 1024m;

Contexto

http, server, location

Quando o buffering de respostas do servidor proxy está habilitado, e toda a resposta não cabe nos buffers definidos pelas diretivas proxy_buffer_size e proxy_buffers, uma parte da resposta pode ser salva em um arquivo temporário. Esta diretiva define o tamanho máximo do arquivo temporário. O tamanho dos dados escritos no arquivo temporário por vez é definido pela diretiva proxy_temp_file_write_size.

0

desabilita o buffering de respostas para arquivos temporários

Nota

Esta restrição não se aplica a respostas que serão cacheadas ou armazenadas em disco.

proxy_method#

Sintaxe

proxy_method método;

Padrão

—

Contexto

http, server, location

Especifica o método HTTP a ser usado em requisições encaminhadas para o servidor proxy em vez do método da requisição do cliente. O valor do parâmetro pode conter variáveis.

proxy_next_upstream#

Sintaxe

proxy_next_upstream error | timeout | invalid_header | http_500 | http_502 | http_503 | http_504 | http_403 | http_404 | http_429 | non_idempotent | off ...;

Padrão

proxy_next_upstream error timeout;

Contexto

http, server, location

Especifica em quais casos uma requisição deve ser passada para o próximo servidor no grupo upstream:

error

ocorreu um erro ao estabelecer uma conexão com o servidor, passar uma requisição para ele, ou ler o cabeçalho da resposta;

timeout

ocorreu um timeout ao estabelecer uma conexão com o servidor, passar uma requisição para ele, ou ler o cabeçalho da resposta;

invalid_header

um servidor retornou uma resposta vazia ou inválida;

http_500

um servidor retornou uma resposta com o código 500;

http_502

um servidor retornou uma resposta com o código 502;

http_503

um servidor retornou uma resposta com o código 503;

http_504

um servidor retornou uma resposta com o código 504;

http_403

um servidor retornou uma resposta com o código 403;

http_404

um servidor retornou uma resposta com o código 404;

http_429

um servidor retornou uma resposta com o código 429;

non_idempotent

normalmente, requisições com um método não-idempotente (POST, LOCK, PATCH) não são passadas para o próximo servidor se uma requisição foi enviada para um servidor upstream; habilitar esta opção permite explicitamente tentar novamente tais requisições;

off

desabilita passar uma requisição para o próximo servidor.

Se todos os servidores do grupo upstream estiverem indisponíveis ou responderem com um status considerado erro por esta diretiva (e seus equivalentes para outros protocolos), o Angie sempre retorna sua própria página de erro em vez da resposta do último servidor.

Nota

Deve-se ter em mente que passar uma requisição para o próximo servidor só é possível se nada foi enviado para um cliente ainda. Ou seja, se um erro ou timeout ocorre no meio da transferência de uma resposta, corrigir isso é impossível.

A diretiva também define o que é considerado uma tentativa mal-sucedida de comunicação com um servidor.

error

timeout

invalid_header

sempre consideradas tentativas mal-sucedidas, mesmo se não especificadas na diretiva

http_500

http_502

http_503

http_504

http_429

consideradas tentativas mal-sucedidas apenas se especificadas na diretiva

http_403

http_404

nunca consideradas tentativas mal-sucedidas

Passar uma requisição para o próximo servidor pode ser limitado pelo número de tentativas e por tempo.

proxy_next_upstream_timeout#

Sintaxe

proxy_next_upstream_timeout tempo;

Padrão

proxy_next_upstream_timeout 0;

Contexto

http, server, location

Limita o tempo durante o qual uma requisição pode ser passada para o próximo servidor.

0

desativa esta limitação

proxy_next_upstream_tries#

Sintaxe

proxy_next_upstream_tries número;

Padrão

proxy_next_upstream_tries 0;

Contexto

http, server, location

Limita o número de tentativas possíveis para passar uma requisição para o próximo servidor.

0

desativa esta limitação

proxy_no_cache#

Sintaxe

proxy_no_cache string ...;

Padrão

—

Contexto

http, server, location

Define condições sob as quais a resposta não será salva em um cache. Se pelo menos um valor dos parâmetros string não estiver vazio e não for igual a "0", então a resposta não será salva:

proxy_no_cache $cookie_nocache $arg_nocache$arg_comment;
proxy_no_cache $http_pragma    $http_authorization;

Os valores dos parâmetros podem conter variáveis.

Pode ser usado junto com a diretiva proxy_cache_bypass.

proxy_pass#

Sintaxe

proxy_pass uri;

Padrão

—

Contexto

location, if in location, limit_except

Define o protocolo e endereço de um servidor com proxy e uma URI opcional para a qual uma localização deve ser mapeada. Como protocolo, http ou https podem ser especificados. O endereço pode ser especificado como um nome de domínio ou endereço IP, e uma porta opcional:

proxy_pass http://localhost:8000/uri/;

ou como um caminho de socket de domínio UNIX especificado após a palavra unix e entre dois pontos:

proxy_pass http://unix:/tmp/backend.socket:/uri/;

Se um nome de domínio resolve para vários endereços, todos eles serão usados de forma round-robin. Além disso, um endereço pode ser especificado como um grupo de servidores.

O valor do parâmetro pode conter variáveis. Neste caso, se um endereço é especificado como um nome de domínio, o nome é procurado entre os grupos de servidores descritos e, se não encontrado, é determinado usando um resolver.

Nota

Um nome de domínio em proxy_pass que não contém variáveis e não corresponde a um grupo de servidores definido cria implicitamente um grupo de servidores de um único servidor, equivalente a:

upstream example.com {
    server example.com;
}

Esses nomes de grupos de servidores são compartilhados por toda a configuração http, independentemente do bloco server em que proxy_pass aparece. Como o server criado implicitamente não possui o parâmetro resolve, o nome é resolvido uma única vez, no momento do carregamento da configuração, e os endereços obtidos são usados até a próxima recarga, mesmo quando um resolver está configurado.

Como resultado, um proxy_pass cuja variável é avaliada para esse mesmo nome reutiliza este grupo de servidores existente com seus endereços obtidos no momento do carregamento, em vez de resolver o nome a cada requisição por meio do resolver. Para resolver o nome novamente em tempo de execução e acompanhar mudanças de DNS, defina o grupo de servidores explicitamente e adicione o parâmetro resolve ao seu server.

Um URI de requisição é passado para o servidor da seguinte forma:

  • Se a diretiva proxy_pass for especificada com um URI, então quando uma requisição é passada para o servidor, a parte de um URI de requisição normalizado que corresponde à localização é substituída por um URI especificado na diretiva:

    location /name/ {
        proxy_pass http://127.0.0.1/remote/;
    }
    

    O servidor recebe a requisição para /name/page como /remote/page.

  • Se proxy_pass for especificado sem um URI, o servidor recebe o URI da requisição com seus argumentos exatamente como o cliente os enviou (o valor de $request_uri), desde que o Angie não tenha alterado o URI nem os argumentos antes de fazer o proxy da requisição. Caso contrário, o servidor recebe o valor atual de $uri, que é o URI normalizado, seguido dos argumentos atuais. Nesse caso, os caracteres que não podem aparecer literalmente no caminho de um URI, como espaços, são codificados novamente em percent-encoding; os argumentos são passados como estão.

    O URI ou os argumentos são considerados alterados quando:

    • a expressão regular de uma diretiva rewrite encontra correspondência;

    • a variável $args recebe um valor, mesmo que seja o atual;

    • a requisição é redirecionada internamente para um URI, por exemplo, pela diretiva index ou error_page, pelo último parâmetro de try_files ou pelo campo de cabeçalho de resposta X-Accel-Redirect.

    Um redirecionamento para um location nomeado não altera o URI, seja feito por goto, error_page, try_files ou X-Accel-Redirect.

    Por exemplo, um cliente requisita /some/path/%7Euser//a%20b?x=1. Nesta configuração, o servidor recebe o URI da requisição sem alterações:

    location /some/path/ {
        proxy_pass http://127.0.0.1;
    }
    

    Nesta configuração, a diretiva rewrite altera o URI:

    location /some/path/ {
        rewrite    ^/some/path/(.*)$ /other/$1 break;
        proxy_pass http://127.0.0.1;
    }
    

    O servidor recebe /other/~user/a%20b?x=1: %7E é decodificado, a barra dupla é mesclada e o espaço é codificado novamente.

Em alguns casos, a parte de um URI de requisição a ser substituída não pode ser determinada:

  • Quando location é especificado usando uma expressão regular, dentro de um location nomeado ou combinado, e dentro de um bloco if ou limit_except.

    Nestes casos, proxy_pass sem variáveis deve ser especificado sem um URI; caso contrário, o Angie se recusa a carregar a configuração.

  • Quando a diretiva rewrite com o sinalizador break altera o URI dentro do location com proxy, de modo que a requisição permanece nesse location:

    location /name/ {
        rewrite    /name/([^/]+) /users?name=$1 break;
        proxy_pass http://127.0.0.1;
    }
    

    Neste caso, o URI especificado na diretiva é ignorado e o URI de requisição alterado completo é passado para o servidor.

  • Quando variáveis são usadas em proxy_pass:

    location /name/ {
        proxy_pass http://127.0.0.1$request_uri;
    }
    

    Neste caso, se o URI for especificado na diretiva, ele é passado para o servidor como está, substituindo o URI de requisição original.

O proxy WebSocket requer configuração especial.

Nota

Se proxy_pass for colocado em um location com uma barra final no prefixo (por exemplo, location /name/), e a diretiva auto_redirect estiver definida como default, requisições sem uma barra final serão redirecionadas (/name -> /name/).

proxy_pass_header#

Sintaxe

proxy_pass_header field;

Padrão

—

Contexto

http, server, location

Permite passar campos de cabeçalho desabilitados de outra forma de um servidor com proxy para um cliente.

proxy_pass_request_body#

Sintaxe

proxy_pass_request_body on | off;

Padrão

proxy_pass_request_body on;

Contexto

http, server, location

Indica se o corpo da requisição original é passado para o servidor com proxy.

location /x-accel-redirect-here/ {
    proxy_method GET;
    proxy_pass_request_body off;
    proxy_set_header Content-Length "";

    proxy_pass ...;
}

Veja também as diretivas proxy_set_header e proxy_pass_request_headers.

proxy_pass_request_headers#

Sintaxe

proxy_pass_request_headers on | off;

Padrão

proxy_pass_request_headers on;

Contexto

http, server, location

Indica se os campos de cabeçalho da requisição original são passados para o servidor com proxy.

location /x-accel-redirect-here/ {
    proxy_method GET;
    proxy_pass_request_headers off;
    proxy_pass_request_body off;

    proxy_pass ...;
}

Veja também as diretivas proxy_set_header e proxy_pass_request_body.

proxy_pass_trailers#

Sintaxe

proxy_pass_trailers on | off;

Padrão

proxy_pass_trailers off;

Contexto

http, server, location

Permite passar campos de trailer de um servidor com proxy para um cliente.

Uma seção de trailer em HTTP/1.1 é explicitamente habilitada.

location / {
    proxy_http_version 1.1;
    proxy_set_header Connection "te";
    proxy_set_header TE "trailers";
    proxy_pass_trailers on;

    proxy_pass ...;
}

proxy_quic_active_connection_id_limit#

Sintaxe

proxy_quic_active_connection_id_limit number;

Padrão

proxy_quic_active_connection_id_limit 2;

Contexto

http, server, location

Define o valor do parâmetro de transporte active_connection_id_limit do QUIC. Este é o número máximo de IDs de conexão ativos que podem ser mantidos por servidor.

proxy_quic_gso#

Sintaxe

proxy_quic_gso on | off;

Padrão

proxy_quic_gso off;

Contexto

http, server, location

Alterna o envio de dados em modo de lote otimizado para QUIC usando generic segmentation offload.

proxy_quic_host_key#

Sintaxe

proxy_quic_host_key file;

Padrão

—

Contexto

http, server, location

Define um file com a chave secreta usada com QUIC para criptografar tokens de Stateless Reset e Address Validation. Por padrão, uma chave aleatória é gerada a cada reinicialização. Tokens gerados com chaves antigas não são aceitos.

proxy_read_timeout#

Sintaxe

proxy_read_timeout tempo;

Padrão

proxy_read_timeout 60s;

Contexto

http, server, location

Define um timeout para ler uma resposta do servidor com proxy. O timeout é definido apenas entre duas operações de leitura sucessivas, não para a transmissão de toda a resposta. Se o servidor com proxy não transmitir nada dentro deste tempo, a conexão é fechada.

proxy_redirect#

Sintaxe

proxy_redirect default;

proxy_redirect off;

proxy_redirect redirect replacement;

Padrão

proxy_redirect default;

Contexto

http, server, location

Define o texto que deve ser alterado nos campos de cabeçalho "Location" e "Refresh" de uma resposta do servidor com proxy.

Suponha que um servidor com proxy retornou o campo de cabeçalho:

Location: http://localhost:8000/two/some/uri/

A diretiva

proxy_redirect http://localhost:8000/two/ http://frontend/one/;

reescreverá esta string para:

Location: http://frontend/one/some/uri/

Um nome de servidor pode ser omitido na string replacement:

proxy_redirect http://localhost:8000/two/ /;

então o nome do servidor primário e a porta, se diferente de 80, serão inseridos.

A substituição padrão especificada pelo parâmetro default usa os parâmetros das diretivas location e proxy_pass. Portanto, as duas configurações abaixo são equivalentes:

location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect default;
}
location /one/ {
    proxy_pass     http://upstream:port/two/;
    proxy_redirect http://upstream:port/two/ /one/;
}

Aviso

O parâmetro default não é permitido se proxy_pass for especificado usando variáveis.

Uma string replacement pode conter variáveis:

proxy_redirect http://localhost:8000/ http://$host:$server_port/;

Um redirect também pode conter variáveis:

proxy_redirect http://$proxy_host:8000/ /;

A diretiva pode ser especificada usando expressões regulares. Neste caso, redirect deve começar com o símbolo "~" para correspondência sensível a maiúsculas e minúsculas, ou com os símbolos "~*" para correspondência insensível a maiúsculas e minúsculas. A expressão regular pode conter capturas nomeadas e posicionais, e replacement pode referenciá-las:

proxy_redirect ~^(http://[^:]+):\d+(/.+)$ $1$2;
proxy_redirect ~*/user/([^/]+)/(.+)$      http://$1.example.com/$2;

Várias diretivas proxy_redirect podem ser especificadas no mesmo nível:

proxy_redirect default;
proxy_redirect http://localhost:8000/  /;
proxy_redirect http://www.example.com/ /;

Se várias diretivas puderem ser aplicadas aos campos de cabeçalho de uma resposta do servidor proxy, a primeira diretiva correspondente será escolhida.

O parâmetro off cancela o efeito das diretivas proxy_redirect herdadas do nível de configuração anterior.

Usando esta diretiva, também é possível adicionar nomes de host a redirecionamentos relativos emitidos por um servidor proxy:

proxy_redirect / /;

proxy_request_buffering#

Sintaxe

proxy_request_buffering on | off;

Padrão

proxy_request_buffering on;

Contexto

http, server, location

Habilita ou desabilita o buffer do corpo da requisição do cliente.

on

todo o corpo da requisição é lido do cliente antes de enviar a requisição para um servidor proxy.

off

o corpo da requisição é enviado para o servidor proxy imediatamente conforme é recebido. Neste caso, a requisição não pode ser passada para o próximo servidor se o Angie já começou a enviar o corpo da requisição.

Quando a codificação de transferência em blocos HTTP/1.1 é usada para enviar o corpo da requisição original, o corpo da requisição será armazenado em buffer independentemente do valor da diretiva, a menos que HTTP/1.1, HTTP/2 ou HTTP/3 esteja habilitado para proxy.

proxy_send_lowat#

Sintaxe

proxy_send_lowat tamanho;

Padrão

proxy_send_lowat 0;

Contexto

http, server, location

Se a diretiva for definida com um valor diferente de zero, o Angie tentará minimizar o número de operações de envio em conexões de saída para um servidor proxy usando a flag NOTE_LOWAT do método kqueue, ou a opção de socket SO_SNDLOWAT, com o tamanho especificado.

Nota

Esta diretiva é ignorada no Linux, Solaris e Windows.

proxy_send_timeout#

Sintaxe

proxy_send_timeout tempo;

Padrão

proxy_send_timeout 60s;

Contexto

http, server, location

Define um timeout para transmitir uma requisição para o servidor proxy. O timeout é definido apenas entre duas operações de escrita sucessivas, não para a transmissão de toda a requisição. Se o servidor proxy não receber nada dentro deste tempo, a conexão é fechada.

proxy_set_body#

Sintaxe

proxy_set_body value;

Padrão

—

Contexto

http, server, location

Permite redefinir o corpo da requisição passado para o servidor proxy. O valor pode conter texto, variáveis e suas combinações.

proxy_set_header#

Sintaxe

proxy_set_header field value;

Padrão

proxy_set_header Host $proxy_host;

Contexto

http, server, location

Permite redefinir ou anexar campos ao cabeçalho da requisição passado para o servidor proxy. O value pode conter texto, variáveis e suas combinações. Essas diretivas são herdadas do nível de configuração anterior se e somente se não houver diretivas proxy_set_header definidas no nível atual. Por padrão, apenas dois campos são redefinidos:

proxy_set_header Host       $proxy_host;
proxy_set_header Connection close;

Se o cache estiver habilitado, os campos de cabeçalho If-Modified-Since, If-Unmodified-Since, If-None-Match, If-Match, Range e If-Range da requisição original não são passados para o servidor proxy.

Um campo de cabeçalho de requisição "Host" inalterado pode ser passado assim:

proxy_set_header Host       $http_host;

No entanto, se este campo não estiver presente em um cabeçalho de requisição do cliente, então nada será passado. Neste caso, é melhor usar a variável $host - seu valor é igual ao nome do servidor no campo de cabeçalho de requisição "Host" ou o nome do servidor primário se este campo não estiver presente:

proxy_set_header Host       $host;

Além disso, o nome do servidor pode ser passado junto com a porta do servidor proxy:

proxy_set_header Host       $host:$proxy_port;

Se o valor de um campo de cabeçalho for uma string vazia, então este campo não será passado para um servidor proxy:

proxy_set_header Accept-Encoding "";

proxy_socket_keepalive#

Sintaxe

proxy_socket_keepalive on | off;

Padrão

proxy_socket_keepalive off;

Contexto

http, server, location

Configura o comportamento "TCP keepalive" para conexões de saída para um servidor proxy.

off

Por padrão, as configurações do sistema operacional estão em vigor para o socket.

on

A opção de socket SO_KEEPALIVE é ativada para o socket.

proxy_ssl_certificate#

Sintaxe

proxy_ssl_certificate file [file] | data:certificate;

Padrão

—

Contexto

http, server, location

Especifica o certificado no formato PEM usado para autenticação em um servidor HTTPS proxy.

O valor é interpretado como em ssl_certificate: um caminho de arquivo ou o texto PEM do certificado após o prefixo data:. O valor pode conter variáveis; elas são avaliadas a cada vez que o Angie estabelece uma conexão com o servidor HTTPS proxy, portanto todas as variáveis da requisição estão disponíveis, incluindo as atribuídas por set. Se o valor avaliado do certificado estiver vazio, nenhum certificado de cliente é enviado. Para evitar carregar certificados a cada conexão, habilite proxy_ssl_certificate_cache.

Quando proxy_ssl_ntls está habilitado, a diretiva aceita dois argumentos em vez de um:

location /proxy {
    proxy_ssl_ntls  on;

    proxy_ssl_certificate      sign.crt enc.crt;
    proxy_ssl_certificate_key  sign.key enc.key;

    proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";

    proxy_pass https://backend:443;
}

proxy_ssl_certificate_cache#

Sintaxe

proxy_ssl_certificate_cache off;

proxy_ssl_certificate_cache max=N [inactive=time] [valid=time];

Padrão

proxy_ssl_certificate_cache off;

Contexto

http, server, location

Define um cache que armazena certificados SSL e chaves secretas especificados usando variáveis.

A diretiva suporta os seguintes parâmetros:

  • max — define o número máximo de elementos no cache. Quando o cache transborda, os elementos menos recentemente usados (LRU) são removidos.

  • inactive — define o tempo após o qual um elemento é removido se não foi acessado durante esse tempo, mesmo que ainda esteja dentro de seu período valid; cada acesso reinicia este temporizador. O padrão é 10 segundos.

  • valid — define o tempo durante o qual um elemento em cache é reutilizado sem verificações. O padrão é 60 segundos. Após este período, um elemento carregado de um arquivo é recarregado apenas se o arquivo tiver mudado, e uma chave carregada com o prefixo engine: ou store: é carregada novamente; um elemento especificado com o prefixo data: permanece válido.

  • off — desabilita o cache.

Chaves protegidas por senha (veja proxy_ssl_password_file) não são armazenadas em cache.

Exemplo:

proxy_ssl_certificate       /etc/angie/ssl/$host.crt;
proxy_ssl_certificate_key   /etc/angie/ssl/$host.key;
proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;

proxy_ssl_certificate_key#

Sintaxe

proxy_ssl_certificate_key file [file] | data:key | engine:name:id | store:uri;

Padrão

—

Contexto

http, server, location

Especifica a chave secreta no formato PEM usada para autenticação em um servidor HTTPS proxy.

O valor, incluindo os prefixos engine: e store:, é interpretado como em ssl_certificate_key, e as variáveis nele funcionam conforme descrito em proxy_ssl_certificate. Uma chave protegida por senha é descriptografada com as senhas de proxy_ssl_password_file.

Quando proxy_ssl_ntls está habilitado, a diretiva aceita dois argumentos em vez de um:

location /proxy {
    proxy_ssl_ntls  on;

    proxy_ssl_certificate      sign.crt enc.crt;
    proxy_ssl_certificate_key  sign.key enc.key;

    proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";

    proxy_pass https://backend:443;
}

proxy_ssl_ciphers#

Sintaxe

proxy_ssl_ciphers ciphers;

Padrão

proxy_ssl_ciphers DEFAULT;

Contexto

http, server, location

Especifica as cifras habilitadas para requisições a um servidor HTTPS com proxy. As cifras são especificadas no formato compreendido pela biblioteca OpenSSL.

A lista de cifras depende da versão do OpenSSL instalada. A lista completa pode ser visualizada usando o comando openssl ciphers.

Aviso

Com o OpenSSL, a diretiva proxy_ssl_ciphers não configura cifras TLS 1.3; defina-as com o comando Ciphersuites da diretiva proxy_ssl_conf_command. A diretiva proxy_ssl_ciphers ignora nomes de cifras TLS 1.3 em seu valor, portanto esses nomes não restringem as conexões TLS 1.3. Se o valor consistir apenas em tais nomes, por exemplo TLS_AES_128_GCM_SHA256, a configuração não é carregada, com o erro no cipher match.

  • No LibreSSL, cifras TLS 1.3 podem ser configuradas usando proxy_ssl_ciphers.

  • No BoringSSL, cifras TLS 1.3 não podem ser configuradas de forma alguma.

proxy_ssl_conf_command#

Sintaxe

proxy_ssl_conf_command name value;

Padrão

—

Contexto

http, server, location

Define comandos arbitrários de configuração OpenSSL ao estabelecer uma conexão com o servidor HTTPS com proxy.

Nota

A diretiva é suportada ao usar OpenSSL 1.0.2 ou superior. O comando Ciphersuites, que define as cifras TLS 1.3, requer OpenSSL 1.1.1 ou superior.

Várias diretivas proxy_ssl_conf_command podem ser especificadas no mesmo nível. Essas diretivas são herdadas do nível de configuração anterior se e somente se não há diretivas proxy_ssl_conf_command definidas no nível atual.

Aviso

Note que configurar o OpenSSL diretamente pode resultar em comportamento inesperado.

proxy_ssl_crl#

Sintaxe

proxy_ssl_crl file;

Padrão

—

Contexto

http, server, location

Especifica um arquivo com certificados revogados (CRL) no formato PEM usado para verificar o certificado do servidor HTTPS com proxy.

proxy_ssl_keylog_file#

Adicionado na versão 1.12.0.

Sintaxe

proxy_ssl_keylog_file file;

Padrão

—

Contexto

http, server, location

Especifica um arquivo para registrar as chaves SSL/TLS das conexões com servidores HTTPS com proxy neste contexto, usando o formato SSLKEYLOGFILE usado por ferramentas como o Wireshark para descriptografar o tráfego TLS capturado.

A diretiva não deve ser usada com o LibreSSL.

Aviso

O arquivo contém material de chave TLS sensível que pode descriptografar o tráfego capturado das conexões correspondentes. Use esta diretiva apenas para depuração ou análise de protocolo, restrinja o acesso ao arquivo e remova-o quando não for mais necessário.

proxy_ssl_name#

Sintaxe

proxy_ssl_name name;

Padrão

proxy_ssl_name $proxy_host;

Contexto

http, server, location

Permite sobrescrever o nome do servidor usado para verificar o certificado do servidor HTTPS com proxy e para ser passado através de SNI ao estabelecer uma conexão com o servidor HTTPS com proxy.

O nome do servidor também pode ser especificado com variáveis.

Por padrão, a parte do host da URL proxy_pass é usada.

proxy_ssl_ntls#

Sintaxe

proxy_ssl_ntls on | off;

Padrão

proxy_ssl_ntls off;

Contexto

http, server, location

Habilita suporte do lado do cliente para NTLS usando a biblioteca TLS Tongsuo.

location /proxy {
    proxy_ssl_ntls  on;

    proxy_ssl_certificate      sign.crt enc.crt;
    proxy_ssl_certificate_key  sign.key enc.key;

    proxy_ssl_ciphers "ECC-SM2-WITH-SM4-SM3:ECDHE-SM2-WITH-SM4-SM3:RSA";

    proxy_pass https://backend:443;
}

Nota

O Angie deve ser compilado com o parâmetro de configuração --with-ntls e uma biblioteca SSL com suporte a NTLS:

$ ./configure --with-openssl=../Tongsuo-8.3.0 \
              --with-openssl-opt=enable-ntls  \
              --with-ntls

proxy_ssl_password_file#

Sintaxe

proxy_ssl_password_file file;

Padrão

—

Contexto

http, server, location

Especifica um arquivo com senhas para chaves secretas onde cada senha é especificada em uma linha separada. As senhas são tentadas em sequência ao carregar a chave.

proxy_ssl_protocols#

Sintaxe

proxy_ssl_protocols SSLv2 | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3 ...;

Padrão

proxy_ssl_protocols TLSv1.2 TLSv1.3;

Contexto

http, server, location

Habilita os protocolos especificados para requisições a um servidor HTTPS com proxy.

proxy_ssl_server_name#

Sintaxe

proxy_ssl_server_name on | off;

Padrão

proxy_ssl_server_name off;

Contexto

http, server, location

Habilita ou desabilita a passagem do nome do servidor definido pela diretiva proxy_ssl_name via a extensão TLS Server Name Indication (SNI, RFC 6066) ao estabelecer uma conexão com o servidor HTTPS com proxy.

proxy_ssl_session_reuse#

Sintaxe

proxy_ssl_session_reuse on | off;

Padrão

proxy_ssl_session_reuse on;

Contexto

http, server, location

Determina se sessões SSL podem ser reutilizadas ao trabalhar com o servidor com proxy. Se o erro SSL3_GET_FINISHED:digest check failed aparecer nos logs, tente desabilitar a reutilização de sessão.

proxy_ssl_trusted_certificate#

Sintaxe

proxy_ssl_trusted_certificate file;

Padrão

—

Contexto

http, server, location

Especifica um arquivo com certificados CA confiáveis no formato PEM usado para verificar o certificado do servidor HTTPS com proxy.

proxy_ssl_verify#

Sintaxe

proxy_ssl_verify on | off;

Padrão

proxy_ssl_verify off;

Contexto

http, server, location

Habilita ou desabilita a verificação do certificado do servidor HTTPS com proxy.

proxy_ssl_verify_depth#

Sintaxe

proxy_ssl_verify_depth number;

Padrão

proxy_ssl_verify_depth 1;

Contexto

http, server, location

Define a profundidade de verificação na cadeia de certificados do servidor HTTPS com proxy.

proxy_store#

Sintaxe

proxy_store on | off | string;

Padrão

proxy_store off;

Contexto

http, server, location

Habilita o salvamento de arquivos em disco.

on

salva arquivos de acordo com os caminhos especificados nas diretivas alias ou root

off

desabilita o salvamento de arquivos

O nome do arquivo pode ser definido explicitamente usando uma string com variáveis:

proxy_store /data/www$original_uri;

O tempo de modificação dos arquivos é definido de acordo com o campo de cabeçalho Last-Modified recebido na resposta. A resposta é primeiro escrita em um arquivo temporário, e então o arquivo é renomeado. O arquivo temporário e o armazenamento persistente para a resposta podem estar em sistemas de arquivos diferentes. No entanto, esteja ciente de que neste caso, em vez da operação barata de renomeação dentro de um sistema de arquivos, o arquivo é copiado de um sistema de arquivos para outro. É portanto recomendado que para qualquer localização específica tanto os arquivos salvos quanto um diretório contendo arquivos temporários, definido pela diretiva proxy_temp_path, sejam colocados no mesmo sistema de arquivos.

Esta diretiva pode ser usada para criar cópias locais de arquivos estáticos imutáveis, por exemplo:

location /images/ {
    root               /data/www;
    error_page         404 = /fetch$uri;
}

location /fetch/ {
    internal;

    proxy_pass         http://backend/;
    proxy_store        on;
    proxy_store_access user:rw group:rw all:r;
    proxy_temp_path    /data/temp;

    alias              /data/www/;
}

ou assim:

location /images/ {
    root               /data/www;
    error_page         404 = @fetch;
}

location @fetch {
    internal;

    proxy_pass         http://backend;
    proxy_store        on;
    proxy_store_access user:rw group:rw all:r;
    proxy_temp_path    /data/temp;

    root               /data/www;
}

proxy_store_access#

Sintaxe

proxy_store_access usuários:permissões [usuários:permissões] [usuários:permissões];

Padrão

proxy_store_access user:rw;

Contexto

http, server, location

Define permissões de acesso para arquivos e diretórios recém-criados, por exemplo:

proxy_store_access user:rw group:rw all:r;

Se quaisquer permissões de acesso group ou all forem especificadas, então as permissões user podem ser omitidas:

proxy_store_access group:rw all:r;

proxy_temp_file_write_size#

Sintaxe

proxy_temp_file_write_size tamanho;

Padrão

proxy_temp_file_write_size 8k|16k;

Contexto

http, server, location

Limita o tamanho dos dados gravados em um arquivo temporário por vez, quando o buffering de respostas do servidor com proxy para arquivos temporários está habilitado. Por padrão, o tamanho é limitado por dois buffers definidos pelas diretivas proxy_buffer_size e proxy_buffers. O tamanho máximo de um arquivo temporário é definido pela diretiva proxy_max_temp_file_size.

proxy_temp_path#

Sintaxe

proxy_temp_path caminho [nível1 [nível2 [nível3]]];

Padrão

proxy_temp_path proxy_temp; (o caminho depende da opção de compilação --http-proxy-temp-path)

Contexto

http, server, location

Define um diretório para armazenar arquivos temporários com dados recebidos de servidores com proxy. Até três níveis de hierarquia de subdiretórios podem ser usados abaixo do diretório especificado. Por exemplo, na seguinte configuração

proxy_temp_path /spool/angie/proxy_temp 1 2;

um arquivo temporário pode parecer assim:

/spool/angie/proxy_temp/7/45/00000123457

Veja também o parâmetro use_temp_path da diretiva proxy_cache_path.

Variáveis integradas#

O módulo suporta variáveis integradas que podem ser usadas para compor cabeçalhos usando a diretiva proxy_set_header:

$proxy_add_x_forwarded_for#

o campo de cabeçalho de requisição do cliente X-Forwarded-For com a variável $remote_addr anexada a ele, separada por vírgula. Se o campo X-Forwarded-For não estiver presente no cabeçalho da requisição do cliente, a variável $proxy_add_x_forwarded_for é igual à variável $remote_addr.

$proxy_host#

nome e porta de um servidor com proxy conforme especificado na diretiva proxy_pass;

$proxy_port#

porta de um servidor com proxy conforme especificado na diretiva proxy_pass, ou a porta padrão do protocolo;