Назад | Перейти на главную страницу

Использование nginx и / или varnish для кеширования сгенерированных сервером 301 редиректов

Я использую своего рода службу сокращения 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 - только для перенаправления?

Однако это, вероятно, не относится к вашему приложению.