Re: nginx fastcgi_cache и Vary headers

Andrey Kopeyko andrey на kopeyko.ru
Ср Мар 30 18:41:59 UTC 2016


On Wed, 30 Mar 2016, Alex Vasilenko wrote:

> Приветствую!

Добрый вечер, Alex!

> Есть контент, который кэшируется директивами fastcgi_cache:
...
> Цель - кэшировать ответы в зависимости от языка в запросе Accept-Language
> Собственно ответ следующего вида:

              ^^^^^
Вот тут у вас начинается недопонимание...

> Насколько я понял из документации
> <http://nginx.org/en/docs/http/ngx_http_fastcgi_module.html#fastcgi_cache_valid>
> это
> должно позволить переопределять и время кэширования и fastcgi_cache_key
> будет немного другой и включит в себе хедеры в Vary.

*_cache_key может включать в себя лишь заголовки запроса; вы же хотите 
добавить в него заголовок из ответа бэкенда. Так не получится ;-)


> Собственно и Cache-Control и Vary
> заголовки игнорируются, кэшируется на минуту с первым попавшим языком.

Вот здесь вы близки к пониманию происходящего, и к решению.

> Что я не так делаю?

Вам надо добавить в fastcgi_cache_key заголовок "Accept-Language" из 
запроса, как-то так:

fastcgi_cache_key
"$request_method|$http_if_modified_since|$http_if_none_match|$host|http_accept_language|$request_uri";

Но будьте готовы к разрастанию кеша, потому что запросы к одному URI но с
чуть разными заголовками
   Accept-Language="ru,ru-RU;q=0.7,en;q=0.3"
и
   Accept-Language="ru;q=0.7,en;q=0.3"

создадут 2 разных файла в кеше.


-- 
Best regards,
Andrey Kopeyko <andrey at kopeyko.ru>


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