proxy_cache & cache-control
Maxim Dounin
mdounin на mdounin.ru
Ср Окт 19 11:35:15 UTC 2016
Hello!
On Wed, Oct 19, 2016 at 12:57:18AM +0100, Anton Kiryushkin wrote:
> Здравствуйте.
>
> У меня два вопроса к собравшимся.
> 1. Чем обсуловлено условие, по которому add_headers и expires нельзя
> добавить для кода ответа 502. Его можно кэшировать, но нельзя пытаться
> управлять этим кэшированием. Например, с помощью expires.
> 2. Собственно сам этот expires и cache-control, похоже, не сильно-то
> жалуются самим nginx.
>
> Решил проверить, что будет, если разрешить добавлять заголовки для 502-го
> кода и с помощью именованного локейшена их туда добавил. Nginx, который
> стоит выше уровнем отлично это дело прокэшировал и получились вот такие
> чудесные заголовки:
>
> HTTP/1.1 502 Bad Gateway
> Server: nginx
> Date: Tue, 18 Oct 2016 23:45:07 GMT
> Content-Type: text/html
> Content-Length: 169
> Connection: close
> Expires: Tue, 18 Oct 2016 23:46:07 GMT
> Cache-Control: max-age=120,public,must-revalidate
>
> В конфиге написано, что 502-й код можно кэшировать только на минуту.
> На деле выходит, что даже в 23:46:07 элемент все еще находится в кэше. Ждем
> еще минуту и чудо все равно не случается. Nginx игнорирует этот элемент
> кэша. Почему/зачем совершенно не понятно.
>
> Может кто-то тут сможет дать совет, как лучше поступить?
Для начала стоит разобраться, что вы понимаете под словами "всё
ещё находится в кэше" и "чудо". Ответ будет находится в кеше до
достижения времени inactive, указанного в директиве
proxy_cache_path, по умолчанию - 10 минут, либо до принудительного
удаления по max_size, указанного там же.
Следует, однако, различать состояния "находится" и "будет
использоваться для ответов пользователям". После достижения
заданного времени ответ, даже находящийся в кеше, считается
устаревшим и перестаёт использоваться кроме как для нужд директивы
proxy_cache_use_stale.
Отмечу так же, что в соответствии с "max-age=120" в заголовке
Cache-Control, приведённый выше ответ устареет через 2 минуты
(если в конфиге не сказано игнорировать Cache-Control). Заголовок
Cache-Control имеет больший приоритет, чем Expires, и оба имеют
приоритет над директивой proxy_cache_valid.
--
Maxim Dounin
http://nginx.org/
Подробная информация о списке рассылки nginx-ru