Opened 14 years ago
Closed 12 years ago
#79 closed enhancement (fixed)
if-modified-since etc. should be used to update cache
| Reported by: | www.google.com/accounts/o8/id?id=AItOawkld7iER0GyI3zEot5C76X4iyiU_ZTWX-I | Owned by: | somebody |
|---|---|---|---|
| Priority: | minor | Milestone: | |
| Component: | nginx-module | Version: | 1.1.x |
| Keywords: | Cc: | ||
| uname -a: | |||
| nginx -V: | not applicable | ||
Description
Идея не моя и была ранее озвучена в рассылке:proxy_cache + conditional GET
Если в кэше уже есть устаревший ответ, то посылать к backend-у запрос с If-Modified-Since или If-None-Match и для ответа с кодом 304 обновлять только время кэширования(из X-Accel-Expires или proxy_cache_valid 200). В случае получения 200 или любого другого кода - поведение не меняется.
Как вариант реализации - директива proxy_cache_conditional_update с параметрами off, etag(If-None-Match), modified(If-Modified-Since), а значения для них брать из полей ETag, Last-Modified или Date в заголовке закэшированного ответа.
Если забыть о ETag и делать на backend-е проверку в стиле if_modified_since before, то значение для If-Modified-Since можно задавать по времени записи в кэш или текущему и даже не читать заголовоки из файла(proxy_cache_conditional_update off | modified | cached | date).
Change History (3)
comment:1 by , 14 years ago
| Status: | new → accepted |
|---|
comment:2 by , 14 years ago
| Summary: | Обновление времени кэширования с помощью conditional запросов к backend-у → if-modified-since etc. should be used to update cache |
|---|
comment:3 by , 12 years ago
| Resolution: | → fixed |
|---|---|
| sensitive: | → 0 |
| Status: | accepted → closed |
The proxy_cache_revalidate directive (and friends) introduced in 43ccaf8e8728, available in nginx 1.5.7+.

Где-то тут в треде есть более или менее работающий (хотя и требующий некоторой дороботки) патч:
http://mailman.nginx.org/pipermail/nginx-devel/2011-September/001187.html