Можно ли указать бэкэнд Varnish в автономном приложении?
На данный момент у нас есть 3 приложения (лаковые бэкэнды):
- Eshop
- CMS
- Маршрутизация - приложение, которое возвращает код состояния, для которого следует выбрать бэкэнд.
Основная идея заключается в том, что у нас есть один домен для Eshop и CMS. И все ссылки хранятся в базе данных MySQL. Таким образом, чтобы решить, куда должен попадать лак, мы используем какое-то приложение для маршрутизации.
Если мы запускаем бэкэнд маршрутизации в vcl_recv, мы проверяем состояние в vcl_backend_response и переключаем бэкэнд следующим образом:
sub vcl_backend_response {
if (591 == beresp.status) {
set bereq.backend = eshopDirector.backend();
return (retry);
} elsif (592 == beresp.status || 593 == beresp.status || 594 == beresp.status) {
set bereq.backend = cmsDirector.backend();
return (retry);
}
}
После повторных попыток мы не кешируем результаты, потому что этап vcl_recv не выполняется снова, чтобы определить, нужно ли получать результаты из кеша или из самого бэкэнда.
Итак, вопрос здесь, есть ли способ определить, какой бэкэнд должен использоваться со стадии vcl_recv, чтобы впоследствии получить кэшированные результаты? Может быть, можно сделать запрос CURL оттуда, чтобы получить статус из приложения маршрутизации и обработать его соответствующим образом?