Proxy#
Permite fazer proxy de fluxos de dados sobre TCP, UDP e sockets de domínio UNIX. 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 No Angie, o endereço é avaliado uma única vez, quando a sessão é inicializada,
antes da seleção de um servidor com proxy. 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, por
meio da variável O parâmetro 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 Nota A tabela de roteamento do kernel também deve ser configurada
para interceptar o tráfego de rede do servidor com proxy. 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. Define um timeout para estabelecer uma conexão com um servidor com proxy. Padrão 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
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 Limita a velocidade de leitura dos dados do servidor com proxy. A 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: 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. 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. Limita o tempo permitido para passar uma conexão para o próximo servidor. desativa esta limitação Limita o número de tentativas possíveis para passar uma conexão para o próximo servidor. desativa esta limitação Define o endereço de um servidor com proxy. O ou como um caminho de socket de domínio UNIX: 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. Se o grupo referenciado for sem porta (PRO), ou seja, seus
servidores são definidos sem porta, a porta é anexada ao nome do grupo: O sufixo de porta é obrigatório para um grupo sem porta e não é permitido para
um grupo cujos servidores já definem portas. Com um endereço estático, violar
qualquer uma dessas regras é um erro de configuração. No Angie PRO, com um
endereço definido por variáveis, a violação é detectada apenas em tempo de
execução, quando o Angie registra um erro e encerra a sessão. O endereço também pode ser especificado usando variáveis
(junto com o sufixo de porta, se permitido): Neste caso, o nome do servidor é pesquisado entre os grupos de servidores descritos e, se não encontrado, é determinado usando um resolver. Habilita o protocolo PROXY para conexões com um servidor com proxy. Adicionado na versão 1.11.0. Adiciona um TLV ao cabeçalho do protocolo PROXY v2 enviado para um servidor com proxy. O value pode conter variáveis. O name pode ser um nome de tipo TLV ou seu valor numérico; neste último caso, o valor é especificado em hexadecimal e deve começar com 0x. Para TLVs SSL, use o prefixo Define a versão do protocolo PROXY usada para conexões com um servidor com proxy. A configuração é efetiva quando proxy_protocol está habilitado. A versão 2 permite enviar TLVs configurados pela diretiva proxy_protocol_tlv. Define o número de datagramas de 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 de cliente são transmitidos para um servidor com proxy e o número esperado de respostas é recebido, ou quando atinge um timeout. 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. Configura o comportamento "TCP keepalive" para conexões de saída para um servidor proxy. Por padrão, as configurações do sistema operacional estão em vigor para o socket. A opção de socket SO_KEEPALIVE é ativada para o socket. Habilita o protocolo SSL/TLS para conexões com um servidor proxy. Especifica a lista de protocolos anunciados por meio da extensão
ALPN
ao estabelecer uma conexão com o servidor proxiado, por exemplo: O valor do parâmetro pode conter variáveis. Especifica o certificado no formato PEM usado para autenticação em um servidor proxy. O valor é interpretado como na diretiva ssl_certificate
do módulo HTTP SSL: um caminho de arquivo ou o texto PEM do
certificado após o prefixo Quando proxy_ssl_ntls está habilitado, a diretiva aceita dois argumentos em vez de um: Padrão stream, server Define um cache que armazena certificados SSL e chaves secretas especificados usando variáveis. A diretiva suporta os seguintes parâmetros: Chaves protegidas por senha (veja proxy_ssl_password_file) não são armazenadas em cache. Exemplo: Padrão — stream, server Especifica a chave secreta no formato PEM usada para autenticação em um servidor proxy. O valor, incluindo os prefixos Quando proxy_ssl_ntls está habilitado, a diretiva aceita dois argumentos em vez de um: 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 Aviso Com o OpenSSL, a diretiva No LibreSSL, cifras TLS 1.3 podem ser configuradas usando
No BoringSSL, cifras TLS 1.3 não podem ser configuradas de forma alguma. 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.
O comando 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. Especifica um arquivo com certificados revogados (CRL) no formato PEM usado para verificar o certificado do servidor proxy. Especifica um arquivo para registrar as chaves SSL/TLS das conexões com os
servidores proxiados no contexto, usando o formato SSLKEYLOGFILE
utilizado por ferramentas como o Wireshark para descriptografar o tráfego TLS
capturado. A diretiva não deve ser usada com LibreSSL. Aviso O arquivo contém material de chaves TLS sensível que permite 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. 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. Habilita o suporte do lado do cliente para NTLS ao usar a biblioteca TLS Tongsuo. Nota O Angie deve ser compilado com o parâmetro de configuração 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. Padrão stream, server Habilita os protocolos especificados para requisições a um servidor proxy. 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 com proxy. Determina se as sessões SSL podem ser reutilizadas ao trabalhar com o servidor com proxy. Se o erro Especifica um arquivo com certificados CA confiáveis no formato PEM usado para verificar o certificado do servidor com proxy. Habilita ou desabilita a verificação do certificado do servidor com proxy. Define a profundidade de verificação na cadeia de certificados do servidor com proxy. Define um timeout entre duas operações sucessivas de leitura ou escrita nas conexões do cliente ou servidor com proxy. Se nenhum dado for transmitido dentro deste tempo, a conexão é fechada. Limita a velocidade de leitura dos dados do cliente. A taxa é especificada em bytes por segundo. 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: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#
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.$upstream_current_addr. Se o valor avaliado estiver
vazio, nenhuma vinculação é feita.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;
transparent for especificado,
os processos worker herdam a capacidade CAP_NET_RAW do processo mestre.proxy_buffer_size#
proxy_connect_timeout#
proxy_connection_drop#
proxy_connection_drop tempo | on | off;proxy_connection_drop off;DELETE.on definido, as sessões são descartadas imediatamente.proxy_download_rate#
rate é especificada em bytes por segundo.0map $slow $rate {
1 4k;
2 8k;
}
proxy_download_rate $rate;
proxy_half_close#
proxy_next_upstream#
proxy_next_upstream_timeout#
0proxy_next_upstream_tries#
0proxy_pass#
address pode ser especificado como um nome de domínio ou endereço IP, e uma porta:proxy_pass localhost:12345;
proxy_pass unix:/tmp/stream.socket;
proxy_pass backend:8443;
proxy_pass $upstream;
proxy_protocol#
proxy_protocol_tlv#
ssl_; o nome especial ssl_verify define o campo verify do TLV SSL. A diretiva é usada apenas com proxy_protocol_version definido como 2.proxy_protocol_version#
proxy_requests#
proxy_responses#
proxy_socket_keepalive#
offonproxy_ssl#
proxy_ssl_alpn#
proxy_ssl_alpn h2 http/1.1;
proxy_ssl_certificate#
data:. O valor pode conter variáveis; elas
são avaliadas a cada vez que o Angie estabelece uma conexão com o servidor
proxy, portanto todas as variáveis da sessão estão disponíveis. 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.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_cache#
proxy_ssl_certificate_cache off;proxy_ssl_certificate_cache max=N [inactive=time] [valid=time];proxy_ssl_certificate_cache off;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.proxy_ssl_certificate /etc/angie/ssl/$ssl_server_name.crt;
proxy_ssl_certificate_key /etc/angie/ssl/$ssl_server_name.key;
proxy_ssl_certificate_cache max=1000 inactive=20s valid=1m;
proxy_ssl_certificate_key#
proxy_ssl_certificate_key file [file] | data:key | engine:name:id | store:uri;engine: e store:, é interpretado
como na diretiva ssl_certificate_key
do módulo HTTP SSL, 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.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#
openssl ciphers.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.proxy_ssl_ciphers.proxy_ssl_conf_command#
Ciphersuites, que define as cifras TLS 1.3, requer
OpenSSL 1.1.1 ou superior.proxy_ssl_crl#
proxy_ssl_keylog_file#
proxy_ssl_name#
proxy_ssl_ntls#
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;
}
--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#
proxy_ssl_protocols#
proxy_ssl_protocols SSLv2 | SSLv3 | TLSv1 | TLSv1.1 | TLSv1.2 | TLSv1.3 ...;proxy_ssl_protocols TLSv1.2 TLSv1.3;proxy_ssl_server_name#
proxy_ssl_session_reuse#
SSL3_GET_FINISHED:digest check failed aparecer nos logs, tente desabilitar a reutilização de sessão.proxy_ssl_trusted_certificate#
proxy_ssl_verify#
proxy_ssl_verify_depth#
proxy_timeout#
proxy_upload_rate#
0map $slow $rate {
1 4k;
2 8k;
}
proxy_upload_rate $rate;