Поставил 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 mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru