Я разрабатываю систему, которая подключается к внешней серверной службе (приобретенной у другой компании), где система будет намного превышать месячную квоту запросов. Я пытаюсь создать прокси/кэш, который будет кэшировать запросы и использовать кешированный ответ, если он присутствует.
Случаи использования:
Случай 1:
- Пользователь запрашивает конечную точку
- Прокси не кэширует
- Прокси перенаправляет запрос на внешний сервер
- Прокси кеширует ответ
- Прокси возвращает ответ пользователю
Случай 2:
- Пользователь запрашивает конечную точку
- Прокси закешировал
- Прокси возвращает кешированный ответ
Случай 3:
- Внешний бэкэнд отправляет веб-хук, говорящий, что все было обновлено
- Прокси очищает кеш
Требования:
- Прокси должен иметь возможность кэшировать файлы (в основном изображения)
- Три разных URL: url1.external-backend.com, url2.external-backend.com и url3.external-backend.com
- Желательно только один прокси для всех трех URL:
- Три URL-адреса могут иметь разные пути (url1.external-backend.com/this/is/a/path), а также могут быть запросы (url1.external-backend.com?query=something).
- Было бы неплохо, если бы прокси можно было очищать на основе того, что отправляется из внешнего бэкенда, но это не обязательно.
Мысли на данный момент:
Я рассматривал для этого две разные системы: Varnish (https://varnish-cache.org/) и Squid (http://www.squid-cache.org/). Пробовал со Squid но так и не понял как настроить конфиг чтобы работал как выше. Образец конфигурационного файла был действительно запутанным и непонятным, и я не смог найти для него никакого руководства в Интернете.
Я изучил Varnish и, насколько я понимаю, его можно было бы использовать. Но у меня есть проблема.
Проблема:
В Varnish /etc/varnish/default.vcl
есть возможность добавлять бэкенды, поэтому я добавил следующее:
backend page2 {
.host = "url2.external-backend.com";
.port = "443";
}
Это дает что-то похожее на это (я точно не помню, и я не вижу сообщение об ошибке прямо сейчас):
Backend host "url2.external-backend.com": resolves to multiple IPv4 addresses.
Only one address is allowed.
Please specify which exact address you want to use, we found these:
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
xxx.xxx.xxx.xxx
Я не осмеливаюсь указать один из IP-адресов вместо имени хоста, и я не уверен, что создание директора является правильным способом. Причина этого в том, что я не контролирую имя хоста, и они не могут гарантировать, что IP-адреса не изменятся.
Вопросы:
- Можно ли как-то заставить это работать в Varnish?
- Может ли кто-нибудь объяснить, как именно должна выглядеть конфигурация Squids, чтобы работать в соответствии с приведенными выше вариантами использования и требованиями (если возможно)?
- Есть ли какой-нибудь другой кеширующий прокси-сервис, который мог бы работать лучше, чем Varnish или Squid?