proxy cache key $cookie .. не работает если есть Set-Cookie:

58v54pms nginx-forum на forum.nginx.org
Вт Июн 19 12:38:49 UTC 2018


Поставил 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 отдовал из кеша если клиент корректно предаёт свою куку при повторных
запросах.

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



Подробная информация о списке рассылки nginx-ru