Я хочу заставить nginx кешировать любые ответы бекэнда вне зависимости от желания браузера (cache-control: no-cache должен игнорироваться). Таким образом, чтоб если у nginx есть что-то в кеше (даже если оно протухло несколько лет назад), он обязательно отправил бекэнду заголовок If-Modified-Since и дал шанс ответить 304 Not Modified.


В настоящий момент я написал такой конфиг:


proxy_cache_path cache/ keys_zone=my_cache:10m max_size=10g use_temp_path=off;
...
location / {
proxy_cache my_cache;
proxy_cache_revalidate on;
proxy_cache_use_stale updating;
proxy_cache_background_update on;
proxy_cache_lock on;
proxy_pass localhost:8080/;
proxy_ignore_headers Cache-Control;
}

Бекэнд добавляет к своим ответом заголовок (пробовал разные комбинации, результат не меняется):


Cache-Control: max-age=60, must-revalidate, public

При первом обращении nginx кеширует ответ на диск, при последующих запросах вообще не обращается к бекэнду, но стоит кешу протухнуть он обращается к бекэнду без if-modified-since, соответственно бекэнд не может знать, что у него есть шанс ответить 304 вместо полноценной обработки запроса.


Я хочу заставить nginx обращаться к бекэнду всегда (этого легко добиться, например, max-age=1), но при этом всегда же он проверял изменённость ответа (if-modified-since) и бекэнд уже решал напрягаться ему полной обработкой или отдать 304 с пустым телом.


Что я делаю не так?









 






URL записи