Я пытаюсь настроить кэширование для вышестоящего сервера (которым я не управляю). Большинство файлов можно кэшировать (и не установить Cache-Control
), они работают нормально.
Однако некоторые местоположения на сервере являются списками каталогов (и имеют Cache-Control: no-store
). Я бы хотел их кэшировать только в том случае, если сервер недоступен. К сожалению, я либо получаю одно из следующих действий:
- В ситуации, когда эти списки не кэшируются (нет файл в кеше, заголовок всегда показывает отсутствие кеша). Если сервер недоступен, списки каталогов (очевидно) не возвращаются
- В ситуации, когда эти списки кэшируются, но они никогда не обновляются впоследствии (по крайней мере, до тех пор, пока кэш действителен). Поскольку я хотел бы долгое время кэшировать все остальные записи, списки каталогов быстро устарели.
Я попытался изменить заголовки на stale-if-error
, но это не выглядело либо в помощь.
map $http_cache_control $http_updated_cache_control {
no-store stale-if-error;
}
server {
...
location /somewhere {
sendfile on;
sendfile_max_chunk 10m;
tcp_nopush on;
proxy_cache keyzone;
# allow using stale requests in case of errors or when updating a file
proxy_cache_use_stale error timeout updating http_500 http_502 http_503 http_504;
proxy_cache_revalidate on;
proxy_cache_background_update on;
# add header to indicate if caching works
add_header X-Cache-Status $upstream_cache_status;
proxy_cache_lock on;
proxy_read_timeout 900;
proxy_pass_header Server;
proxy_ignore_headers Set-Cookie;
# allow caching of non-cacheable entries only when the server is erroring
proxy_hide_header Cache-Control;
add_header Cache-Control $http_updated_cache_control;
# don't ignore the cache control header: some items (like directory listings) are marked as "don't cache")
#proxy_ignore_headers Cache-Control;
}
}
Как я могу кэшировать записи с помощью Cache-Control: no-store
, но использовать кэшированные записи только если вышестоящий сервер не работает?