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

2022-07-09 Пенетрантность VovansystemS
Добрый день,

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

Спасибо большое за быстрый ответ, - помогло!

Результирующая конфигурация для моих целей получилась такая:

map $upstream_http_set_cookie $bypass_cache {
"~*pll" 0;
"~*=" 1;
}

proxy_ignore_headers "Set-cookie";
proxy_no_cache $bypass_cache;

Ответы содержащие заголовок Set-cookie могут кешироваться. Если в
заголовке Set-cookie встречается pll - такой ответ кешируется. Если в
заголовке Set-cookie встречается любое другое установленное значение
(есть символ "="), то такой ответ кешироваться не будет. Если же
заголовок Set-cookie пустой, то такой ответ будет кешироваться.
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


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

2022-07-08 Пенетрантность milov
Тоже вопрос на ту же тему, чтоб не плодить темы.

Есть код

set $no_cache 0;

if ($request_method = POST){set $no_cache 1;}
if ($http_host ~* success.html$){set $no_cache 1;}
if ($remote_addr ~* ^(192.168.0*)$){set $no_cache 1;}

# Не берется из кеша
fastcgi_cache_bypass $no_cache;

# Не сохраняется в кеш
fastcgi_no_cache $no_cache; 

Ни один if не срабатывает. Куда смотреть, копать?

Posted at Nginx Forum: 
https://forum.nginx.org/read.php?21,294681,294690#msg-294690

___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org


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

2022-07-07 Пенетрантность Maxim Dounin
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;
> default1;
> }
> 
> 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


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

2022-07-07 Пенетрантность VovansystemS
Добрый день,

нужно избирательно кешировать ответы бэкэнда в 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;
default1;
}

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.

Может быть есть какие-то мысли как такое лучше реализовать и возможно
ли это вообще?

nginx -v
nginx version: nginx/1.19.2

nginx -V
nginx version: nginx/1.19.2
built by gcc 8.3.0 (Debian 8.3.0-6)
built with OpenSSL 1.1.1d  10 Sep 2019
TLS SNI support enabled
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx
--modules-path=/usr/lib/nginx/modules
--conf-path=/etc/nginx/nginx.conf
--error-log-path=/var/log/nginx/error.log
--http-log-path=/var/log/nginx/access.log
--pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock
--http-client-body-temp-path=/var/cache/nginx/client_temp
--http-proxy-temp-path=/var/cache/nginx/proxy_temp
--http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp
--http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp
--http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx
--group=nginx --with-compat --with-file-aio --with-threads
--with-http_addition_module --with-http_auth_request_module
--with-http_dav_module --with-http_flv_module
--with-http_gunzip_module --with-http_gzip_static_module
--with-http_mp4_module --with-http_random_index_module
--with-http_realip_module --with-http_secure_link_module
--with-http_slice_module --with-http_ssl_module
--with-http_stub_status_module --with-http_sub_module
--with-http_v2_module --with-mail --with-mail_ssl_module --with-stream
--with-stream_realip_module --with-stream_ssl_module
--with-stream_ssl_preread_module --with-cc-opt='-g -O2
-fdebug-prefix-map=/data/builder/debuild/nginx-1.19.2/debian/debuild-base/nginx-1.19.2=.
-fstack-protector-strong -Wformat -Werror=format-security
-Wp,-D_FORTIFY_SOURCE=2 -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now
-Wl,--as-needed -pie'
___
nginx-ru mailing list -- nginx-ru@nginx.org
To unsubscribe send an email to nginx-ru-le...@nginx.org