Hello! On Wed, Mar 30, 2016 at 09:41:59PM +0300, Andrey Kopeyko wrote:
> On Wed, 30 Mar 2016, Alex Vasilenko wrote: [...] > >Собственно и 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 разных файла в кеше. Начиная с версии 1.7.7 nginx умеет сам смотреть на заголовок Vary, возвращаемый в ответе бекендом, и учитывать его при кешировании, при необходимости создавая для разных вариантов ресурса производные ключи и кеш-файлы, http://nginx.org/ru/CHANGES.ru: *) Изменение: теперь nginx учитывает при кэшировании строку "Vary" в заголовке ответа бэкенда. От разрастания кеша это, конечно, не спасёт, но должно работать само. (Чтобы кеш не разростался сверх необходимого - нужно знать логику выбора представления на бекенде, и повторить её в рамках создания ключа кеширования, других вариантов просто нет.) Судя по тому, что "и Cache-Control и Vary заголовки игнорируются" - проблему стоит искать где-то в районе конфига, там скорее всего кто-то написал fastcgi_ignore_headers как минимум со значениями Cache-Control, Expires и Vary. (Отдельно отмечу, что нескольких заголовков Vary в ответе - плохая идея, nginx использует последний из них. Но в данном случае проблема явно не в этом, т.к. Cache-Control также игнорируется.) -- Maxim Dounin http://nginx.org/ _______________________________________________ nginx-ru mailing list nginx-ru@nginx.org http://mailman.nginx.org/mailman/listinfo/nginx-ru