Tunnel#
Добавлено в версии 1.12.0.
Модуль Tunnel (ngx_http_tunnel_module) обрабатывает запросы HTTP/1.1
CONNECT
и устанавливает сквозное виртуальное соединение между клиентом и
проксируемым сервером, позволяя Angie выступать в роли перенаправляющего прокси.
Доступ к туннелю управляется стандартными директивами разграничения доступа:
auth_basic, satisfy и auth_delay. Задаёт локальный IP-адрес с необязательным портом, который будет использоваться
в исходящих соединениях с проксируемым сервером. Значение параметра
может содержать переменные. Специальное значение Параметр Для работы параметра обычно требуется запускать рабочие процессы Angie с
привилегиями суперпользователя. В Linux это не требуется:
если указан параметр По умолчанию http, server, location Задаёт размер буфера, используемого для чтения данных от проксируемого сервера.
Также задаёт размер буфера, используемого для чтения данных от клиента. По умолчанию http, server, location Задаёт тайм-аут для установления соединения с проксируемым сервером. Следует
учитывать, что этот тайм-аут обычно не может превышать 75 секунд. По умолчанию http, server, location Определяет, в каких случаях запрос будет передан следующему серверу: произошла ошибка соединения с сервером или чтения данных от него; произошёл тайм-аут во время установления соединения с сервером, передачи
ему запроса или чтения данных от него; запрещает передачу запроса следующему серверу. Передача запроса следующему серверу возможна только при условии, что клиенту
ещё ничего не передавалось. Если ошибка или тайм-аут происходят в
середине передачи ответа, исправить это невозможно. Директива также определяет, что считается
неудачной попыткой работы с сервером. Случаи Передача запроса следующему серверу может быть ограничена
количеством попыток и
временем. По умолчанию http, server, location Ограничивает время, в течение которого запрос может быть передан
следующему серверу. Значение По умолчанию http, server, location Ограничивает число возможных попыток передачи запроса
следующему серверу. Значение Включает обработку запросов CONNECT и задаёт адрес проксируемого сервера. По умолчанию
адрес равен Адрес может быть задан доменным именем или IP-адресом и портом: или в виде пути к UNIX-сокету: Если доменному имени соответствует несколько адресов, все они будут
использоваться по круговому принципу. Кроме того, адрес может быть задан как
группа серверов. Значение параметра может содержать переменные. В этом случае, если адрес задан
доменным именем, имя ищется среди описанных
групп серверов, а если не найдено, определяется с помощью
resolver. По умолчанию http, server, location Задаёт тайм-аут между двумя последовательными операциями чтения или записи на
соединениях с клиентом или проксируемым сервером. Если в течение этого времени
данные не передаются, соединение закрывается. Если директиве задано ненулевое значение, Angie будет пытаться уменьшить число
операций отправки на исходящих соединениях с проксируемым сервером, используя либо
флаг Эта директива игнорируется на Linux, Solaris и Windows. По умолчанию http, server, location Задаёт тайм-аут при передаче данных проксируемому серверу. Тайм-аут устанавливается
только между двумя последовательными операциями записи, а не на всю передачу.
Если проксируемый сервер ничего не получит в течение этого времени, соединение
закрывается. По умолчанию http, server, location Настраивает поведение "TCP keepalive" для исходящих соединений с
проксируемым сервером. По умолчанию для сокета действуют настройки операционной
системы. Если директиве задано значение Пример конфигурации#
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;
}
}
Директивы#
tunnel_bind#
off отменяет действие
директивы tunnel_bind, унаследованной с предыдущего уровня конфигурации,
что позволяет системе автоматически назначать локальный IP-адрес и порт.transparent позволяет задать нелокальный IP-адрес, который
будет использоваться в исходящих соединениях с проксируемым сервером, например
реальный IP-адрес клиента:tunnel_bind $remote_addr transparent;
transparent, рабочие процессы наследуют
capability CAP_NET_RAW из главного процесса.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 и
timeout всегда считаются неудачными попытками, даже если они не указаны
в директиве.tunnel_next_upstream_timeout#
tunnel_next_upstream_timeout time;tunnel_next_upstream_timeout 0;0 отключает
это ограничение.tunnel_next_upstream_tries#
tunnel_next_upstream_tries number;tunnel_next_upstream_tries 0;0 отключает
это ограничение.tunnel_pass#
$host:$request_port и берётся из запроса клиента. В
большинстве случаев для tunnel_pass не требуется указывать аргументы.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 метода kqueue, либо параметр сокета
SO_SNDLOWAT с указанным размером.tunnel_send_timeout#
tunnel_send_timeout time;tunnel_send_timeout 60s;tunnel_socket_keepalive#
tunnel_socket_keepalive on | off;tunnel_socket_keepalive off;on, для сокета включается
параметр сокета SO_KEEPALIVE.