<div dir="ltr">Максим,<div><br></div><div>Стыдно признать, но вы оказались полностью правы. Cache-Control с Expires был в <span style="line-height:1.5">fastcgi_ignore_headers. А Vary в ответе был еще один, который собственно перезатирал предыдущие. </span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">Как я могу указать несколько заголовков с Vary в таком случае? </span><span style="line-height:1.5">Vary: Accept-Language, X-Authentication (через запятую)?</span></div><div><span style="line-height:1.5">Будет ли Accept-Encoding автоматически добавлен нджинксом в ответ в Vary хедер в таком случае?</span></div><div><span style="line-height:1.5"><br></span></div><div><span style="line-height:1.5">Спасибо!</span></div><div><span style="line-height:1.5">Александр</span></div></div><br><div class="gmail_quote"><div dir="ltr">On Wed, Mar 30, 2016 at 9:35 PM Maxim Dounin <<a href="mailto:mdounin@mdounin.ru">mdounin@mdounin.ru</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Hello!<br>
<br>
On Wed, Mar 30, 2016 at 09:41:59PM +0300, Andrey Kopeyko wrote:<br>
<br>
> On Wed, 30 Mar 2016, Alex Vasilenko wrote:<br>
<br>
[...]<br>
<br>
> >Собственно и Cache-Control и Vary<br>
> >заголовки игнорируются, кэшируется на минуту с первым попавшим языком.<br>
><br>
> Вот здесь вы близки к пониманию происходящего, и к решению.<br>
><br>
> >Что я не так делаю?<br>
><br>
> Вам надо добавить в fastcgi_cache_key заголовок "Accept-Language" из<br>
> запроса, как-то так:<br>
><br>
> fastcgi_cache_key<br>
> "$request_method|$http_if_modified_since|$http_if_none_match|$host|http_accept_language|$request_uri";<br>
><br>
> Но будьте готовы к разрастанию кеша, потому что запросы к одному URI но с<br>
> чуть разными заголовками<br>
> Accept-Language="ru,ru-RU;q=0.7,en;q=0.3"<br>
> и<br>
> Accept-Language="ru;q=0.7,en;q=0.3"<br>
><br>
> создадут 2 разных файла в кеше.<br>
<br>
Начиная с версии 1.7.7 nginx умеет сам смотреть на заголовок Vary,<br>
возвращаемый в ответе бекендом, и учитывать его при кешировании,<br>
при необходимости создавая для разных вариантов ресурса<br>
производные ключи и кеш-файлы, <a href="http://nginx.org/ru/CHANGES.ru" rel="noreferrer" target="_blank">http://nginx.org/ru/CHANGES.ru</a>:<br>
<br>
*) Изменение: теперь nginx учитывает при кэшировании строку "Vary" в<br>
заголовке ответа бэкенда.<br>
<br>
От разрастания кеша это, конечно, не спасёт, но должно работать<br>
само. (Чтобы кеш не разростался сверх необходимого - нужно знать<br>
логику выбора представления на бекенде, и повторить её в рамках<br>
создания ключа кеширования, других вариантов просто нет.)<br>
<br>
Судя по тому, что "и Cache-Control и Vary заголовки игнорируются" -<br>
проблему стоит искать где-то в районе конфига, там скорее всего<br>
кто-то написал fastcgi_ignore_headers как минимум со значениями<br>
Cache-Control, Expires и Vary.<br>
<br>
(Отдельно отмечу, что нескольких заголовков Vary в ответе -<br>
плохая идея, nginx использует последний из них. Но в данном<br>
случае проблема явно не в этом, т.к. Cache-Control также<br>
игнорируется.)<br>
<br>
--<br>
Maxim Dounin<br>
<a href="http://nginx.org/" rel="noreferrer" target="_blank">http://nginx.org/</a><br>
<br>
_______________________________________________<br>
nginx-ru mailing list<br>
<a href="mailto:nginx-ru@nginx.org" target="_blank">nginx-ru@nginx.org</a><br>
<a href="http://mailman.nginx.org/mailman/listinfo/nginx-ru" rel="noreferrer" target="_blank">http://mailman.nginx.org/mailman/listinfo/nginx-ru</a></blockquote></div>