Spec-Zone.ru › Varnish

VCL-бекенды

Настройка бэкендов

Раздел руководства:

7

Определение бэкенда

Объявление бэкенда создаёт и инициализирует объект бэкенда с заданным именем. Объявление начинается со слова backend, за которым следует имя бэкенда. Само объявление находится в фигурных скобках в формате ключ/значение:

backend name {
    .attribute1 = value;
    .attribute2 = value;
    [...]
}

Если существует бэкенд с именем default, он будет использован, если не указан другой. Если не указан ни один бэкенд с именем default, первым бэкендом в программе VCL будет являться бэкенд по умолчанию.

Если используются только динамические бэкенды, созданные VMOD, можно указать пустой, всегда возвращающий ошибку (503) бэкенд:

backend default none;

Бэкенд должен быть указан либо с атрибутом .host, либо с атрибутом .path, но не с обоими одновременно. Все остальные атрибуты имеют значения по умолчанию.

Атрибут .host

Для указания сетевого бэкенда .host требуется числовой IPv4/IPv6 адрес или имя домена, разрешающее максимум один IPv4 и один IPv6 адрес:

.host = "127.0.0.1";

.host = "[::1]:8080";

.host = "example.com:8081";

.host = "example.com:http";

Атрибут .port

Номер TCP порта или имя сервиса могут быть указаны как часть .host, как показано выше, или отдельно с помощью атрибута .port:

.port = "8081";

.port = "http";

Атрибут .path

Абсолютный путь к Unix(4) доменному сокету локального бэкенда:

.path = "/var/run/http.sock";

или, где доступно, @, за которым следует имя абстрактного сокета локального бэкенда:

.path = "@mybackend";

При загрузке VCL будет выведено предупреждение, если сокет uds не существует. Это позволяет запустить UDS-слушателя или установить права доступа к файлу сокета позже.

Если сокет uds не существует или доступ к нему запрещён, попытки подключения будут неуспешны.

Атрибут .host_header

Заголовок хоста для добавления к запросам зондирования и обычным запросам к бэкенду, если у них нет такого заголовка:

.host_header = "Host: example.com";

Атрибуты таймаута

Эти атрибуты контролируют терпеливость varnishd при получении данных от бэкенда:

.connect_timeout = 1.4s;
.first_byte_timeout = 20s;
.between_bytes_timeout = 10s;

Значения по умолчанию задаются параметрами с такими же именами, см. varnishd.

Атрибут .max_connections

Ограничение количества одновременных подключений, которые может открыть varnish к бэкенду:

.max_connections = 1000;

Атрибут .proxy_header

Отправка заголовка PROXY протокола бэкенду со значениями client.ip и server.ip:

.proxy_header = 2;

Допустимые значения равны одному и двум, в зависимости от версии PROXY протокола, которую вы хотите использовать.

Примечание: эта настройка приведёт к использованию подключений к бэкенду только для одного запроса (предполагаются будущие улучшения). Следовательно, следует проявлять особую осторожность, чтобы избежать ошибок подключения к бэкенду с EADDRNOTAVAIL из-за отсутствия доступных локальных портов. Возможные варианты:

  • Использование дополнительных подключений к бэкенду к дополнительным IP-адресам или TCP-портам
  • Увеличение количества доступных портов (Linux sysctl net.ipv4.ip_local_port_range)
  • Раннее повторное использование портов подключений к бэкенду (Linux sysctl net.ipv4.tcp_tw_reuse)

Атрибут .preamble

Отправка BLOB на все недавно открытые подключения к бэкенду:

.preamble = :SGVsbG8gV29ybGRcbgo=:;

Атрибут .via

Имя другого бэкенда-прокси, через который происходит подключение к целевому бэкенду, используя протокол PROXY2, например:

backend proxy {
  .path = "/path/to/proxy2_endpoint";
}
backend destination {
  .host = "1.2.3.4";
  .via = proxy;
}

Бэкенд-прокси также может использовать определение .host/.port вместо .path.

Использование атрибута .path для целевого бэкенда не поддерживается.

Атрибут .via не связан с .proxy_header. Если оба используются, отправляется второй заголовок в соответствии со спецификацией .proxy_header.

Начиная с этой версии, бэкенд-прокси, используемый с .via, не может быть директором, он сам не может использовать .via (ошибка: Нельзя укладывать бэкенды .via), и протокол фиксируется на PROXY2.

Деталь реализации:

Если используется .via = <proxy>, создаётся преамбула PROXY2 с информацией об адресе целевого бэкенда как dst_addr/dst_port и, необязательно, другими атрибутами TLV. Затем осуществляется подключение к конечной точке бэкенда-прокси (path или host/port). Это технически эквивалентно указанию backend destination_via_proxy с атрибутом .preamble, содержащим соответствующую преамбулу PROXY2 для целевого бэкенда.

Атрибут .authority

Используемый HTTP заголовок авторизации при подключении к этому бэкенду. Если не задан, используются значения по умолчанию .host_header или .host.

.authority = "" отключает отправку авторизации.

Начиная с этой версии, атрибут используется только для подключений .via как атрибут PP2_TYPE_AUTHORITY Тип-Длина-Значение (TLV) в преамбуле PROXY2.

Атрибут .probe

См. VCL-зондирование.

См. также

  • varnishd
  • VCL
  • VCL-зондирование
  • Модуль Varnish Directors (VMOD директоров)
  • Стандартный модуль Varnish (VMOD std)

ИСТОРИЯ

VCL был разработан Poul-Henning Kamp в сотрудничестве с Verdens Gang AS, Redpill Linpro и Varnish Software. Эта страница руководства написана Per Buer, Poul-Henning Kamp, Martin Blix Grydeland, Kristian Lyngstøl, Lasse Karstensen и другими.

АВТОРСКИЕ ПРАВА

Этот документ лицензирован так же, как и сам Varnish. См. файл LICENSE для подробностей.

  • Авторские права (c) 2006 Verdens Gang AS
  • Авторские права (c) 2006-2021 Varnish Software AS

Copyright © 2006 Verdens Gang AS
Copyright © 2006–2020 Varnish Software AS
Licensed under the BSD-2-Clause License.
https://varnish-cache.org/docs/7.4/reference/vcl-backend.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API