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-le...@nginx.org