Как отобразить возраст кэшированного файла nginx в заголовках
Я установил кеширующий сервер для сайта с помощью nginx 1.6.3 на CentOS 7 и настроил его на добавление заголовков HTTP в обслуживаемые файлы, чтобы показать, были ли упомянутые файлы отправлены с кеширующего сервера (HIT, MISS или BYPASS ) так:
add_header X-Cached $upstream_cache_status;
Однако я хотел бы посмотреть, есть ли способ добавить заголовок для отображения возраста кэшированного файла, так как у моего решения есть proxy_cache_valid 200 60m;
set, и я хотел бы проверить, соблюдает ли этот параметр.
Так что я ищу, было бы что-то вроде:
add_header Cache-Age $upstream_cache_age;
Я не могу найти что-нибудь подобное, не могли бы вы помочь?
Спасибо
Ответы
Ответ 1
Документация nginx достаточно полная - нет переменной с прямым относительным возрастом кэшированного файла.
Лучшим способом было бы использовать класс переменных $upstream_http_
, чтобы получить абсолютный возраст ресурса, набрав его Date
через $upsteam_http_date
.
add_header X-Cache-Date $upstream_http_date;
Для семантического значения заголовка Date
в HTTP/1.1 см. rfc7231#section-7.1.1.2, который описывает его как время генерации ответа HTTP, поэтому, в основном, это должно выполнить именно то, что вы хотите (особенно если бэкэнд работает с тем же timecounter).
Ответ 2
Я потратил некоторое время на то, чтобы решить эту проблему с помощью модуля Nginx Perl, который, похоже, не имеет доступа к $upstream_http_NAME, которые позволят вам успешно рассчитать текущее время из заголовка временной метки, созданного вашим прокси-сервером во время рендеринга.
В качестве альтернативы вы можете использовать другую архитектуру уровня кэширования, такую как Varnish Cache, которая действительно предоставляет заголовок ответа HTTP Age
:
http://book.varnish-software.com/3.0/HTTP.html#age