Proxy#

Permite fazer proxy de fluxos de dados sobre sockets TCP, UDP e de domínio UNIX.

Exemplo de Configuração#

server {
    listen 127.0.0.1:12345;
    proxy_pass 127.0.0.1:8080;
}

server {
    listen 12345;
    proxy_connect_timeout 1s;
    proxy_timeout 1m;
    proxy_pass example.com:12345;
}

server {
    listen 53 udp reuseport;
    proxy_timeout 20s;
    proxy_pass dns.example.com:53;
}

server {
    listen [::1]:12345;
    proxy_pass unix:/tmp/stream.socket;
}

Diretivas#

proxy_bind#

Sintaxe

proxy_bind address [transparent] | off;

Padrão

Contexto

stream, server

Faz com que as conexões de saída para um servidor com proxy se originem do endereço IP local especificado. 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.

O parâmetro transparent permite que as 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, os processos worker do Angie geralmente precisam executar com privilégios de superusuário. No Linux, isso não é necessário: se o parâmetro transparent for especificado, os processos worker herdam a capacidade CAP_NET_RAW do processo mestre.

Nota

A tabela de roteamento do kernel também deve ser configurada para interceptar o tráfego de rede do servidor com proxy.

proxy_buffer_size#

Sintaxe

proxy_buffer_size size;

Padrão

proxy_buffer_size 16k;

Contexto

stream, server

Define o tamanho do buffer usado para ler dados do servidor com proxy. Também define o tamanho do buffer usado para ler dados do cliente.

proxy_connect_timeout#

Sintaxe

proxy_connect_timeout time;

Padrão

proxy_connect_timeout 60s;

Contexto

stream, server

Define um timeout para estabelecer uma conexão com um servidor com proxy.

proxy_connection_drop#

Sintaxe

proxy_connection_drop time | on | off;

Padrão

proxy_connection_drop off;

Contexto

stream, server

Habilita o encerramento de todas as sessões para o servidor com 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.

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

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

proxy_download_rate#

Sintaxe

proxy_download_rate rate;

Padrão

proxy_download_rate 0;

Contexto

stream, server

Limita a velocidade de leitura dos dados do servidor com proxy. A rate é especificada em bytes por segundo.

0

desabilita a limitação de taxa

Nota

O limite é definido por conexão, então se o Angie abrir simultaneamente duas conexões para o servidor com proxy, a taxa geral será o dobro do 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:

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_download_rate $rate;

proxy_half_close#

Sintaxe

proxy_half_close on | off;

Padrão

proxy_half_close off;

Contexto

stream, server

Habilita ou desabilita o fechamento independente de cada direção de uma conexão TCP ("TCP half-close"). Se habilitado, o proxy sobre TCP será mantido até que ambos os lados fechem a conexão.

proxy_next_upstream#

Sintaxe

proxy_next_upstream on | off;

Padrão

proxy_next_upstream on;

Contexto

stream, server

Quando uma conexão com o servidor com proxy não pode ser estabelecida, determina se uma conexão de cliente será passada para o próximo servidor no pool upstream.

Passar uma conexã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 time;

Padrão

proxy_next_upstream_timeout 0;

Contexto

stream, server

Limita o tempo permitido para passar uma conexão para o próximo servidor.

0

desativa esta limitação

proxy_next_upstream_tries#

Sintaxe

proxy_next_upstream_tries number;

Padrão

proxy_next_upstream_tries 0;

Contexto

stream, server

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

0

desativa esta limitação

proxy_pass#

Sintaxe

proxy_pass address;

Padrão

Contexto

server

Define o endereço de um servidor com proxy. O address pode ser especificado como um nome de domínio ou endereço IP, e uma porta:

proxy_pass localhost:12345;

ou como um caminho de socket de domínio UNIX:

proxy_pass unix:/tmp/stream.socket;

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 endereço também pode ser especificado usando variáveis:

proxy_pass $upstream;

Neste caso, o nome do servidor é pesquisado entre os grupos de servidores descritos e, se não encontrado, é determinado usando um resolver.

proxy_protocol#

Sintaxe

proxy_protocol on | off;

Padrão

proxy_protocol off;

Contexto

stream, server

Habilita o protocolo PROXY para conexões com um servidor proxy.

proxy_requests#

Sintaxe

proxy_requests number;

Padrão

proxy_requests 0;

Contexto

stream, server

Define o número de datagramas do cliente no qual a vinculação entre um cliente e uma sessão de stream UDP existente é descartada. Após receber o número especificado de datagramas, o próximo datagrama do mesmo cliente inicia uma nova sessão. A sessão termina quando todos os datagramas do cliente são transmitidos para um servidor proxy e o número esperado de respostas é recebido, ou quando atinge um timeout.

proxy_responses#

Sintaxe

proxy_responses number;

Padrão

Contexto

stream, server

Define o número de datagramas esperados do servidor proxy em resposta a um datagrama do cliente se o protocolo UDP for usado. O número serve como uma dica para o término da sessão. Por padrão, o número de datagramas não é limitado.

Se o valor zero for especificado, nenhuma resposta é esperada. No entanto, se uma resposta for recebida e a sessão ainda não estiver finalizada, a resposta será tratada.

proxy_socket_keepalive#

Sintaxe

proxy_socket_keepalive on | off;

Padrão

proxy_socket_keepalive off;

Contexto

stream, server

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#

Sintaxe

proxy_ssl on | off;

Padrão

proxy_ssl off;

Contexto

stream, server

Habilita o protocolo SSL/TLS para conexões com um servidor proxy.

proxy_ssl_certificate#

Sintaxe

proxy_ssl_certificate file [file];

Padrão

Contexto

stream, server

Especifica um arquivo com o certificado no formato PEM usado para autenticação em um servidor proxy. Variáveis podem ser usadas no nome do arquivo.

Adicionado na versão 1.2.0.

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

server {
    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 backend:12345;
}

proxy_ssl_certificate_key#

Sintaxe

proxy_ssl_certificate_key file [file];

Padrão

Contexto

stream, server

Especifica um arquivo com a chave secreta no formato PEM usado para autenticação em um servidor proxy. Variáveis podem ser usadas no nome do arquivo.

Adicionado na versão 1.2.0.

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

server {
    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 backend:12345;
}

proxy_ssl_ciphers#

Sintaxe

proxy_ssl_ciphers ciphers;

Padrão

proxy_ssl_ciphers DEFAULT;

Contexto

stream, server

Especifica as cifras habilitadas para requisições a um servidor 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

A diretiva proxy_ssl_ciphers não configura cifras para TLS 1.3 quando usando OpenSSL. Para configurar cifras TLS 1.3 com OpenSSL, use a diretiva proxy_ssl_conf_command, que foi adicionada para configuração SSL avançada.

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

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

proxy_ssl_conf_command#

Sintaxe

proxy_ssl_conf_command name value;

Padrão

Contexto

stream, server

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

Nota

A diretiva é suportada quando usando OpenSSL 1.0.2 ou superior. Para configurar cifras TLS 1.3 com OpenSSL, use o comando ciphersuites.

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 arquivo;

Padrão

Contexto

stream, server

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

proxy_ssl_name#

Sintaxe

proxy_ssl_name nome;

Padrão

proxy_ssl_name host de proxy_pass;

Contexto

stream, server

Permite sobrescrever o nome do servidor usado para verificar o certificado do servidor proxy e para ser passado através do SNI ao estabelecer uma conexão com o servidor proxy. O nome do servidor também pode ser especificado usando variáveis.

Por padrão, o nome do host do endereço especificado pela diretiva proxy_pass é usado.

proxy_ssl_ntls#

Adicionado na versão 1.2.0.

Sintaxe

proxy_ssl_ntls on | off;

Padrão

proxy_ssl_ntls off;

Contexto

stream, server

Habilita o suporte do lado do cliente para NTLS ao usar a biblioteca TLS TongSuo.

server {
    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 backend:12345;
}

Nota

O Angie deve ser compilado usando o parâmetro de configuração --with-ntls, com a biblioteca SSL correspondente com suporte NTLS

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

proxy_ssl_password_file#

Sintaxe

proxy_ssl_password_file arquivo;

Padrão

Contexto

stream, server

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

stream, server

Alterado na versão 1.2.0: O parâmetro TLSv1.3 foi adicionado ao conjunto padrão.

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

proxy_ssl_server_name#

Sintaxe

proxy_ssl_server_name on | off;

Padrão

proxy_ssl_server_name off;

Contexto

stream, server

Habilita ou desabilita a passagem do nome do servidor especificado pela diretiva proxy_ssl_name através da extensão TLS Server Name Indication (SNI, RFC 6066) ao estabelecer uma conexão com o servidor proxy.

proxy_ssl_session_reuse#

Sintaxe

proxy_ssl_session_reuse on | off;

Padrão

proxy_ssl_session_reuse on;

Contexto

stream, server

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

proxy_ssl_trusted_certificate#

Sintaxe

proxy_ssl_trusted_certificate arquivo;

Padrão

Contexto

stream, server

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

proxy_ssl_verify#

Sintaxe

proxy_ssl_verify on | off;

Padrão

proxy_ssl_verify off;

Contexto

stream, server

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

proxy_ssl_verify_depth#

Sintaxe

proxy_ssl_verify_depth número;

Padrão

proxy_ssl_verify_depth 1;

Contexto

stream, server

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

proxy_timeout#

Sintaxe

proxy_timeout tempo;

Padrão

proxy_timeout 10m;

Contexto

stream, server

Define um timeout entre duas operações sucessivas de leitura ou escrita nas conexões do cliente ou servidor proxy. Se nenhum dado for transmitido dentro deste tempo, a conexão é fechada.

upstream_probe_timeout (PRO)#

Adicionado na versão 1.4.0: PRO

Sintaxe

upstream_probe_timeout tempo;

Padrão

upstream_probe_timeout 50s;

Contexto

server

Define o tempo máximo de inatividade para uma conexão estabelecida com o servidor para verificações de saúde configuradas usando a diretiva upstream_probe (PRO); se este limite for excedido, a conexão será fechada.

proxy_upload_rate#

Sintaxe

proxy_upload_rate rate;

Padrão

proxy_upload_rate 0;

Contexto

stream, server

Limita a velocidade de leitura dos dados do cliente. A taxa é especificada em bytes por segundo.

0

desabilita a limitação de taxa

Nota

O limite é definido por conexão, então se o cliente abrir simultaneamente duas conexões, a taxa geral será o dobro do limite especificado.

O valor do parâmetro pode conter variáveis. Isso pode ser útil em casos onde a taxa deve ser limitada dependendo de uma determinada condição:

map $slow $rate {
    1     4k;
    2     8k;
}

proxy_upload_rate $rate;