Вы можете использовать расширенную переменную для выполнения работы.
varnishncsa
из внутреннего запроса
Вот пример, где я получаю имя внутреннего бэкенда для запросы бэкэнда:
varnishncsa -b -F "%{VSL:BackendOpen[2]}x"
Вам необходим тег VSL - это тег BackendOpen
, который будет возвращать следующий вывод в varnishlog
:
- BackendOpen 32 boot.bla 192.168.224.2 8080 192.168.224.3 53908
As Вы можете видеть, что имя бэкэнда является вторым полем, отсюда и выражение BackendOpen[2]
.
varnishncsa
из клиентского запроса
В клиентском потоке серверная часть намекнула , но не открыта.
Если вы хотите получить доступ к подсказке , вам потребуется доступ к переменной req.backend_hint
. Вы можете использовать std.log()
для регистрации этого значения как тега VCL_Log
.
Вот пример VCL:
vcl 4.0;
import std;
backend default {
.host="1.2.3.4";
.port="80";
}
sub vcl_recv {
std.log("Backend: "+ req.backend_hint);
}
А вот команда varnishncsa
, которая будет искать это значение :
varnishncsa -c -F "%{VSL:VCL_Log:Backend}x"
Заключение
Конечно, вам все еще нужно немного настроить команду varnishncsa
, чтобы включить правильные поля и фильтр для правильных параметров, но, надеюсь, это ответит на ваш вопрос. вопрос.
Вам нужно искать имя бэкэнда на стороне клиентского запроса или на стороне запроса бэкэнда .