Tunnel#
Adicionado na versão 1.12.0.
O módulo Tunnel (ngx_http_tunnel_module) trata requisições
CONNECT
do HTTP/1.1 e estabelece uma conexão virtual de ponta a ponta entre o
cliente e um servidor backend, permitindo que o Angie atue como um proxy de
encaminhamento.
O acesso ao túnel é controlado pelas diretivas de acesso padrão:
auth_basic, satisfy e auth_delay. Faz com que as conexões de saída para um servidor backend se originem do
endereço IP local especificado, com uma porta opcional. O valor do
parâmetro pode conter variáveis. O valor especial O parâmetro Para que esse 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 Define o size do buffer usado para ler dados do servidor backend. Também
define o size do buffer usado para ler dados do cliente. Define um tempo de espera para o estabelecimento de uma conexão com um
servidor backend. Deve-se observar que esse tempo de espera geralmente não
pode exceder 75 segundos. Padrão http, server, location Especifica em quais casos uma requisição deve ser passada para o próximo
servidor: ocorreu um erro ao estabelecer uma conexão com o servidor ou ao ler
dados dele; ocorreu um timeout ao estabelecer uma conexão com o servidor, ao
passar uma requisição para ele ou ao ler dados dele; desabilita a passagem de uma requisição para o próximo servidor. Passar uma requisição para o próximo servidor só é possível se nada tiver
sido enviado a um cliente ainda. Se ocorrer um erro ou timeout 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.
Os casos de A passagem de uma requisição para o próximo servidor pode ser limitada
pelo número de tentativas e pelo
tempo. Padrão http, server, location Limita o tempo durante o qual uma requisição pode ser passada para o
próximo servidor. O valor Padrão http, server, location Limita o número de tentativas possíveis para passar uma requisição para o
próximo servidor. O valor Habilita o tratamento de requisições CONNECT e define o endereço de um
servidor backend. Por padrão, o address é O endereço pode ser especificado como um nome de domínio ou endereço IP, e
uma porta: ou como um caminho de socket de domínio UNIX: Se um nome de domínio for resolvido em vários endereços, todos eles serão
usados no modo 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. Nesse caso, se um endereço for
especificado como um nome de domínio, o nome é procurado entre os
grupos de servidores descritos e, se não for
encontrado, é determinado usando um resolver. Define o tempo de espera entre duas operações sucessivas de leitura ou
escrita nas conexões do cliente ou do servidor backend. Se nenhum dado for
transmitido dentro desse tempo, a conexão é fechada. Se a diretiva for definida com um valor diferente de zero, o Angie
tentará minimizar o número de operações de envio nas conexões de saída
para um servidor backend usando a flag Essa diretiva é ignorada no Linux, Solaris e Windows. Define um tempo de espera para a transmissão de dados ao servidor backend.
O tempo de espera é definido apenas entre duas operações de escrita
sucessivas, não para toda a transmissão. Se o servidor backend não
receber nada dentro desse tempo, a conexão é fechada. Padrão http, server, location Configura o comportamento de "TCP keepalive" para as conexões de saída
para um servidor backend. Por padrão, as configurações do sistema
operacional estão em vigor para o socket. Se a diretiva for definida com o
valor Exemplo de Configuração#
http {
map $host $allow_host {
hostnames;
example.org 1;
*.example.org 1;
}
server {
listen 8000;
resolver 127.0.0.53;
if ($allow_host != 1) {
return 502;
}
tunnel_pass;
}
}
Diretivas#
tunnel_bind#
off cancela o
efeito da diretiva tunnel_bind herdada do nível de configuração
anterior, o que permite que o sistema atribua automaticamente o endereço IP
local e a porta.transparent permite que as conexões de saída para um
servidor backend se originem de um endereço IP não local, por exemplo, de
um endereço IP real de um cliente:tunnel_bind $remote_addr transparent;
transparent for
especificado, os processos worker herdam a capacidade CAP_NET_RAW
do processo mestre.tunnel_buffer_size#
tunnel_connect_timeout#
tunnel_next_upstream#
tunnel_next_upstream error | timeout | off ...;tunnel_next_upstream error timeout;errortimeoutofferror e timeout são sempre considerados
tentativas mal-sucedidas, mesmo que não sejam especificados na diretiva.tunnel_next_upstream_timeout#
tunnel_next_upstream_timeout time;tunnel_next_upstream_timeout 0;0 desativa
essa limitação.tunnel_next_upstream_tries#
tunnel_next_upstream_tries number;tunnel_next_upstream_tries 0;0 desativa
essa limitação.tunnel_pass#
$host:$request_port e é
obtido da requisição do cliente. Na maioria dos casos, tunnel_pass
não requer a configuração de nenhum argumento.tunnel_pass localhost:9000;
tunnel_pass unix:/tmp/backend.socket;
tunnel_read_timeout#
tunnel_send_lowat#
NOTE_LOWAT do método
kqueue, ou a opção de socket SO_SNDLOWAT, com o size
especificado.tunnel_send_timeout#
tunnel_socket_keepalive#
tunnel_socket_keepalive on | off;tunnel_socket_keepalive off;on, a opção de socket SO_KEEPALIVE é ativada para o
socket.