Давненько я не писал сюда статей.

Сегодня наткнулся на интересную особенность 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)

Next Post