Мне нужно настроить конфигурацию для многих подобных сред. У каждого будет свое имя хоста, которое следует шаблону, например. env1, env2 и т. д.
Я могу использовать пул для каждой среды и один виртуальный сервер с правилом, которое выбирает пул на основе имени хоста.
Я бы предпочел динамически генерировать и выбирать имя пула на основе запрошенного имени хоста, а не перечислять каждый пул в операторе switch. Его легче поддерживать, и он автоматически обрабатывает новые среды.
Код может выглядеть так:
when HTTP_REQUEST {
pool [string tolower [HTTP:host]]
}
и имя каждого пула соответствует имени хоста.
Это возможно? Или есть лучший метод?
ИЗМЕНИТЬ
Я расширил свой выбор пула имен хостов. Сейчас я пытаюсь включить номер порта. Новое правило выглядит так:
when HTTP_REQUEST {
set lb_port "[LB::server port]"
set hostname "[string tolower [getfield [HTTP::host] : 1]]"
log local0.info "Pool name $hostname-$lb_port-pool"
pool "$hostname-$lb_port-pool"
}
Это работает, но я вижу в журналах ошибки отсутствия такого пула, потому что каким-то образом в пул поступает запрос порта 0. Кажется, это первый запрос, а за ним следует запрос с легитимным портом.
Wed Feb 17 20:39:14 EST 2016 info tmm tmm[6519] Rule /Common/one-auto-pool-select-by-hostname-port <HTTP_REQUEST>: Pool name my.example.com-80-pool
Wed Feb 17 20:39:14 EST 2016 err tmm1 tmm[6519] 01220001 TCL error: /Common/one-auto-pool-select-by-hostname-port <HTTP_REQUEST> - no such pool: my.example.com-0-pool (line 1) invoked from within "pool "$hostname-$lb_port-pool""
Wed Feb 17 20:39:14 EST 2016 info tmm1 tmm[6519] Rule /Common/one-auto-pool-select-by-hostname-port <HTTP_REQUEST>: Pool name my.example.com-0-pool
Что вызывает запрос порта 0? И есть ли обходной путь? например Могу ли я проверить порт 0 и выбрать порт по умолчанию или игнорировать его?
ЕЩЕ ОДНА ПРАВКА
Пересобрал виртуальный сервер, теперь ошибка ушла. Однако перестройка VS заключалась в том, чтобы просто переименовать его. Я почти уверен, что воссоздал настройки точно так же.