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 для целевого бэкенда.
Атрибут .probe
См. VCL-зондирование.
См. также
ИСТОРИЯ
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