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