Re: nginx fastcgi_cache и Vary headers

Alex Vasilenko aa.vasilenko на gmail.com
Ср Мар 30 21:02:31 UTC 2016


Максим,

Стыдно признать, но вы оказались полностью правы. Cache-Control с Expires
был в fastcgi_ignore_headers. А Vary в ответе был еще один, который
собственно перезатирал предыдущие.

Как я могу указать несколько заголовков с Vary в таком случае? Vary:
Accept-Language, X-Authentication (через запятую)?
Будет ли Accept-Encoding автоматически добавлен нджинксом в ответ в Vary
хедер в таком случае?

Спасибо!
Александр

On Wed, Mar 30, 2016 at 9:35 PM Maxim Dounin <mdounin на mdounin.ru> wrote:

> 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
----------- следущая часть -----------
Вложение в формате HTML было извлечено…
URL: <http://mailman.nginx.org/pipermail/nginx-ru/attachments/20160330/642ea1d7/attachment.html>


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