Nginx-ru mailing list archive (nginx-ru@sysoev.ru)
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
proxy_cache + conditional GET
Наблюдаю следующую картину:
без proxy-cache:
browser (If-Modified-Since) -> nginx (If-Modified-Since) -> upstream
browser <- (304 Not Modified) nginx <- (304 Not Modified) upstream
с proxy-cache:
browser (If-Modified-Since) -> nginx () -> upstream
browser <- (304 Not Modified) nginx <- (200 OK) upstream
т.е. при наличии proxy-cache апстрим лишается возможности отдавать 304 код,
поскольку заголовки If-Modified-Since и If-None-Match к нему не доходят. Даже
когда proxy_cache_min_uses > 1
В случае когда апстрим умеет дешево отдавать 304 и при значительном количестве
редкоизменяемых страниц - кеш заметно увеличивает нагрузку на апстрим. В то же
время совсем отказываться от кеша не хотелось бы, так как он хорошо прикрывает
пиковые нагрузки. Типичные запросы с If-Modified-Since приходят от роботов
поисковиков и прочих агрегаторов.
Не планируется ли доработать реализацию кеша, чтобы
1) пока не достигнут предел proxy_cache_min_uses - не фильтровать заголовки
поскольку страница заведомо в кеш не попадет; и/или
2) когда в кеше уже есть файл и он устарел, то посылать апстриму conditional
запрос используя время модификации/ETag документа из кеша, и в случае ответа
апстрима 304 - просто обновить время действия документа в кеше. Это также
неплохо сочетается с http://www.lexa.ru/nginx-ru/msg30677.html
И, чтобы два раза не вставать, поясните пожалуйста, как рассчитывать размер
кей-зоны, и что произойдет если он окажется недостаточен (будет просто больше
обращений к диску?), а также отдельно в случае proxy_cache_min_uses > 1
(отдельные счетчики не будут инкрементированны?)
Собственно вот фрагмент кода в ngx_http_proxy_module.c который приоткрывает
верхушку айсберга:
#if (NGX_HTTP_CACHE)
static ngx_keyval_t ngx_http_proxy_cache_headers[] = {
{ ngx_string("Host"), ngx_string("$proxy_host") },
{ ngx_string("Connection"), ngx_string("close") },
{ ngx_string("Keep-Alive"), ngx_string("") },
{ ngx_string("Expect"), ngx_string("") },
{ ngx_string("If-Modified-Since"), ngx_string("") },
{ ngx_string("If-Unmodified-Since"), ngx_string("") },
{ ngx_string("If-None-Match"), ngx_string("") },
{ ngx_string("If-Match"), ngx_string("") },
{ ngx_string("Range"), ngx_string("") },
{ ngx_string("If-Range"), ngx_string("") },
{ ngx_null_string, ngx_null_string }
};
и далее
h = conf->upstream.cache ? ngx_http_proxy_cache_headers:
ngx_http_proxy_headers;
_______________________________________________
nginx-ru mailing list
nginx-ru@xxxxxxxxx
http://nginx.org/mailman/listinfo/nginx-ru
|