Welcome! Log In Create A New Profile

Advanced

proxy_cache_key $cookie_.. не работает если есть Set-Cookie:

June 19, 2018 08:38AM
Поставил nginx кешировать запросы с бекенда.
Конфиг просейший, ответ бекенда - тоже.
Кеширования не происходит.
Прошу раъяснить происходящее с опцией proxy_cache_key $cookie_.. (см ниже)

debian 9 ; nginx:
ii nginx 1.14.0-1~stretch amd64 high performance web server
установлен отюсда
cat /etc/apt/sources.list.d/nginx.list
deb "http://nginx.org/packages/debian/" stretch nginx


START конфиг nginx:
location / {
proxy_cache cache_mytest;

proxy_cache_valid 200 600s;
proxy_cache_valid any 50s;

#тут я использую $cookie_test
proxy_cache_key "$scheme$host$request_uri$cookie_test";


#это бекенд
proxy_pass http://127.0.0.1:8000;
...
END конфиг nginx:


START запрос к и ответ от бекенда:
> GET / HTTP/1.1
> Host: localhost
> User-Agent: curl/7.52.1
> Accept: */*
>
< HTTP/1.1 200 OK
< Server: nginx/1.14.0
< Date: Tue, 19 Jun 2018 12:06:02 GMT
< Content-Type: text/html; charset=UTF-8
< Content-Length: 4
< Connection: keep-alive
< Set-Cookie: test=ok; path=/
END запрос к и ответ от бекенда.

Бекенд выдает всега только test=ok в Set-Cookie:
я расчитываю что я указал $cookie_test в proxy_cache_key вот так:
proxy_cache_key "$scheme$host$request_uri$cookie_test";

а значит, что ответ бекенда должен !!! _как минимум попасть в кеш_ !!! при первом запросе, но этого не происходит.
Если бекенд не выдает < Set-Cookie: test=ok; path=/ то всё кешируется на ура.
Почему не работает?

И зачем тогда вообще $cookie_* параметры в proxy_cache_key если они просто не работают?


P.S.
Я могу предположить, что логика nginx при повторных запросах клиента который передает Cookie: test=ok
такова, что nginx должен должен увидеть настройку $cookie_test в proxy_cache_key, увидеть что клиент передал куку test и тогда полезть в тот кеш в котором у него закеширован ответ от бекенда где эта кука равнялась ok и отдать запрос клиенту из кеша. То есть при такой настройке он должен проверять значение кук и лезть в правильное место в кеше и отдовать оттуда.
я так понимаю nginx делает MD5() от значений в proxy_cache_key
то есть в моем примере выше это должно быть так httplocalhost/test=ok
где test=ok это значение Cookie: test=ok переданное _от клиента_ в повторном запросе.

P.P.S
про
proxy_ignore_headers "Set-Cookie"
я знаю, но я не могу так включать потому что на сайте есть авторизация для пользователей.
я хочу чтобы nginx корректно учитывал куки и сохранял в кеш страницы с Set-Cookie если на то есть соответствующая опция в proxy_cache_key ..$cookie_.. .
B отдовал из кеша если клиент корректно предаёт свою куку при повторных запросах.
Subject Author Posted

proxy_cache_key $cookie_.. не работает если есть Set-Cookie:

58v54pms June 19, 2018 08:38AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 154
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