ПРОЕКТЫ 


  АРХИВ 


Apache-Talk @lexa.ru 

Inet-Admins @info.east.ru 

Filmscanners @halftone.co.uk 

Security-alerts @yandex-team.ru 

nginx-ru @sysoev.ru 


  СТАТЬИ 


  ПЕРСОНАЛЬНОЕ 


  ПРОГРАММЫ 



ПИШИТЕ
ПИСЬМА












     АРХИВ :: nginx-ru
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


 




Copyright © Lexa Software, 1996-2009.