Welcome! Log In Create A New Profile

Advanced

Re: кешировать только ответы где есть определённый Set-Cookie

Maxim Dounin
July 07, 2022 10:46PM
Hello!

On Thu, Jul 07, 2022 at 02:59:34PM +0300, VovansystemS wrote:

> Добрый день,
>
> нужно избирательно кешировать ответы бэкэнда в nginx. Некоторые ответы
> содержат Set-Cookie заголовки.По-умолчанию их кешировать не нужно, но
> если встречается определённая куки, то такой ответ нужно кешировать.
>
> пример:
>
> кешируем ответ с заголовком:
> Set-Cookie: pll_language=en; expires=Fri, 07-Jul-2023 11:37:39 GMT;
> Max-Age=31536000; path=/; secure; SameSite=Lax
>
> не кешируем ответ с сессией пользователя с заголовком:
> Set-Cookie: login=i324iuhkj324; expires=Fri, 10-Jul-2023 11:37:39 GMT;
> Max-Age=31536000; path=/; secure
>
> пытаюсь делать так:
>
> map $upstream_http_set_cookie $bypass_cache {
> "~*.pll" 0;
> default 1;
> }
>
> server {
> [..]
> location @granted {
> [..]
> proxy_ignore_headers Set-cookie;
> proxy_no_cache $bypass_cache;
> proxy_cache_bypass $bypass_cache;
> add_header X-Bypass $bypass_cache;
> add_header X-upstream-set-cookie "aaa $upstream_http_set_cookie";
> [..]
> }
> [..]
> }
>
> в ответе получаю:
> X-Bypass: 1
> X-upstream-set-cookie: aaa pll_language=en; expires=Fri, 07-Jul-2023
> 11:37:39 GMT; Max-Age=31536000; path=/; secure; SameSite=Lax
>
> такое впечатление, что директива add_header корректно видит содержимое
> заголовка ответа апстрима, а вот map (и if тоже пытался) - не видят
> содержимого ни $upstream_http_set_cookie ни
> $upstream_cookie_pll_language.
>
> Может быть есть какие-то мысли как такое лучше реализовать и возможно
> ли это вообще?

У вас map выполняется в proxy_cache_bypass, то есть до отправки
запроса на бэкенд, и запоминает результат (некорректный, так как
он основан на ещё не полученных от бэкенда заголовках ответа).

Очевидное решение - директиву proxy_cache_bypass убрать, она тут
работать не может. Решение "сохранять ли в кэш полученный от
бэкенда ответ" принимается с помощью директивы proxy_no_cache, её
одной вполне достаточно.

--
Maxim Dounin
http://mdounin.ru/
_______________________________________________
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-leave@nginx.org
Subject Author Posted

кешировать только ответы где есть определённый Set-Cookie

VovansystemS July 07, 2022 08:02AM

Re: кешировать только ответы где есть определённый Set-Cookie

Maxim Dounin July 07, 2022 10:46PM

Re: кешировать только ответы где есть определённый Set-Cookie

milov July 08, 2022 02:02PM

Re: кешировать только ответы где есть определённый Set-Cookie

VovansystemS July 09, 2022 04:12AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 318
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready