Давненько я не писал сюда статей.
Сегодня наткнулся на интересную особенность nginx при кэшировании RANGED-ответов от upstream-ов.
HEAD запросы приводят к выкачиванию всего файла в кэш. В исходнике, в функции запроса к upstream HEAD заменяется на GET, а в комментариях
/* HEAD was changed to GET to cache response */.
Получается, что nginx в данном случае "нарушает" стандарты протокола HTTP. Вариант выхода, а точнее ухода от такой ситуации - это проброс HEAD-запросов непосредственно на upstream:
proxy_set_header Range $http_range;
proxy_set_header If-Range $http_if_range;
+ # bypass HEAD request. Other way entire file loaded to cache
+ if ( $request_method = HEAD )
+ set $nocache 1;
+ }
+ proxy_no_cache $nocache;
+ proxy_cache_bypass $nocache;
Вот такие дела.
(это мой пост http://eleksir8.blogspot.ru/2012/10/nginx-head.html)