Я использую своего рода службу сокращения URL-адресов. Что происходит, так это то, что у меня есть сервер бэкэнд-приложений, который принимает запрос, выполняет некоторые вычисления и возвращает перенаправленный URL-адрес 301 обратно вверх по направлению к интерфейсу nginx:
request ---> nginx ----> app_server
Я хочу иметь возможность кэшировать этот возвращенный URL-адрес 301 для того же запроса (конкретный URL-адрес с «коротким кодом»).
Выполняет ли nginx это кеширование автоматически? Или я должен добавить что-то вроде лака между nginx и app_server? Я могу легко кэшировать это в кэше памяти, но для этого потребуется обратиться к app_server, что, я уверен, можно обойтись после первого запроса.
Спасибо.
Вы можете настроить Nginx для этого.
Пример: для кеширования редиректа (301 или 302) до 60 минут:
proxy_cache_valid 301 302 60m;
Varnish кэширует любые ответы HTTP, соответствующие его логике, а перенаправления - это просто ответы HTTP 301 или 302, которые можно легко кэшировать. Конечно, вы можете изменить логику по умолчанию с помощью языка VCL Varnish.
Наш сервер Varnish автоматически кэширует перенаправления. Вы контролируете TTL кеша, устанавливая заголовок «Cache-Control: max-age» (или Expires) в своем ответе серверной части. Если вы не укажете TTL, я считаю, что по умолчанию 120 секунд. Убедитесь, что вы не устанавливаете файлы cookie в домене, и не отбрасывайте их, когда они входят в Varnish, иначе запросы будут проходить через Varnish. Мы просто создали отдельный поддомен для перенаправлений и явно отбрасываем любые входящие и исходящие файлы cookie через VCL.
В качестве дополнительного примечания для других случаев использования: вы можете полностью разгрузить перенаправления на Varnish, чтобы они никогда не попадали в бэкэнд. Пример кода: https://www.varnish-cache.org/trac/wiki/VCLExampleRedirectInVCL
Я тоже изучаю это, и насколько я понимаю, Varnish выполняет редиректы очень косвенно. То же самое и с кешированием прокси в Nginx. Итак, насколько я понимаю, нам нужен Varnish для кеширования и апстрима, а Nginx - только для перенаправления?
Однако это, вероятно, не относится к вашему приложению.