Tunnel#
Added in version 1.12.0.
El módulo Tunnel (ngx_http_tunnel_module) gestiona solicitudes
CONNECT
de HTTP/1.1 y establece una conexión virtual de extremo a extremo entre el
cliente y un servidor backend, lo que permite que Angie actúe como proxy de
reenvío (forwarding proxy).
El acceso al túnel se controla con las directivas de acceso estándar:
auth_basic, satisfy, y auth_delay. Hace que las conexiones salientes a un servidor backend se originen desde la
dirección IP local especificada, con un puerto opcional. El valor del
parámetro puede contener variables. El valor especial El parámetro Para que este parámetro funcione, normalmente es necesario ejecutar los
procesos de trabajo de Angie con privilegios de superusuario.
En Linux no es necesario, ya que, si se especifica el parámetro
Predeterminado http, server, location Establece el size del buffer usado para leer datos del servidor backend.
También establece el size del buffer usado para leer datos del cliente. Predeterminado http, server, location Define un tiempo de espera para establecer una conexión con un servidor
backend. Cabe señalar que este tiempo de espera normalmente no puede superar
los 75 segundos. Predeterminado http, server, location Especifica en qué casos una solicitud debe pasarse al siguiente servidor: se produjo un error al establecer una conexión con el servidor o al
leer datos de este; se produjo un tiempo de espera agotado al establecer una conexión con
el servidor, al pasarle una solicitud o al leer datos de este; deshabilita el paso de una solicitud al siguiente servidor. Pasar una solicitud al siguiente servidor solo es posible si aún no se ha
enviado nada a un cliente. Si se produce un error o un tiempo de espera
agotado en medio de la transferencia de una respuesta, es imposible
solucionarlo. La directiva también define qué se considera un
intento fallido de comunicación con un servidor. Los
casos de El paso de una solicitud al siguiente servidor puede limitarse mediante
el número de intentos y mediante
el tiempo. Predeterminado http, server, location Limita el tiempo durante el cual una solicitud puede pasarse al
siguiente servidor. El valor Predeterminado http, server, location Limita el número de intentos posibles para pasar una solicitud al
siguiente servidor. El valor Habilita la gestión de solicitudes CONNECT y establece la dirección de un
servidor backend. Por defecto, la address es La dirección puede especificarse como un nombre de dominio o una dirección
IP, y un puerto: o como una ruta de socket de dominio UNIX: Si un nombre de dominio se resuelve en varias direcciones, todas ellas se
usarán con el método round-robin. Además, una dirección
puede especificarse como un grupo de servidores. El valor del parámetro puede contener variables. En este caso, si una
dirección se especifica como un nombre de dominio, el nombre se busca entre
los grupos de servidores descritos y, si no se
encuentra, se determina usando un resolver. Predeterminado http, server, location Establece el tiempo de espera entre dos operaciones sucesivas de lectura o
escritura en las conexiones del cliente o del servidor backend. Si no se
transmiten datos dentro de este tiempo, la conexión se cierra. Si la directiva se establece en un valor distinto de cero, Angie intentará
minimizar el número de operaciones de envío en las conexiones salientes a un
servidor backend usando ya sea el flag Esta directiva se ignora en Linux, Solaris y Windows. Predeterminado http, server, location Establece un tiempo de espera para transmitir datos al servidor backend. El
tiempo de espera se establece solo entre dos operaciones de escritura
sucesivas, no para toda la transmisión. Si el servidor backend no recibe
nada dentro de este tiempo, la conexión se cierra. Predeterminado http, server, location Configura el comportamiento de "TCP keepalive" para las conexiones salientes
a un servidor backend. Por defecto, para el socket están en vigor los
ajustes del sistema operativo. Si la directiva se establece en el valor
Ejemplo de configuración#
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;
}
}
Directivas#
tunnel_bind#
off cancela el
efecto de la directiva tunnel_bind heredada del nivel de
configuración anterior, lo que permite que el sistema asigne automáticamente
la dirección IP local y el puerto.transparent permite que las conexiones salientes a un
servidor backend se originen desde una dirección IP no local, por ejemplo,
desde una dirección IP real de un cliente:tunnel_bind $remote_addr transparent;
transparent, los procesos de trabajo heredan la capacidad
CAP_NET_RAW del proceso maestro.tunnel_buffer_size#
tunnel_buffer_size size;tunnel_buffer_size 4k|8k;tunnel_connect_timeout#
tunnel_connect_timeout time;tunnel_connect_timeout 60s;tunnel_next_upstream#
tunnel_next_upstream error | timeout | off ...;tunnel_next_upstream error timeout;errortimeoutofferror y timeout siempre se consideran intentos
fallidos, incluso si no se especifican en la directiva.tunnel_next_upstream_timeout#
tunnel_next_upstream_timeout time;tunnel_next_upstream_timeout 0;0
desactiva esta limitación.tunnel_next_upstream_tries#
tunnel_next_upstream_tries number;tunnel_next_upstream_tries 0;0
desactiva esta limitación.tunnel_pass#
$host:$request_port y
se toma de la solicitud del cliente. En la mayoría de los casos,
tunnel_pass no requiere configurar ningún argumento.tunnel_pass localhost:9000;
tunnel_pass unix:/tmp/backend.socket;
tunnel_read_timeout#
tunnel_read_timeout time;tunnel_read_timeout 60s;tunnel_send_lowat#
NOTE_LOWAT del método
kqueue, o la opción de socket SO_SNDLOWAT, con el size
especificado.tunnel_send_timeout#
tunnel_send_timeout time;tunnel_send_timeout 60s;tunnel_socket_keepalive#
tunnel_socket_keepalive on | off;tunnel_socket_keepalive off;on, la opción de socket SO_KEEPALIVE se activa para el
socket.