<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:x="urn:schemas-microsoft-com:office:excel" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="Generator" content="Microsoft Word 14 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri","sans-serif";
        mso-fareast-language:EN-US;}
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 72.0pt 72.0pt 72.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="EN-GB" link="blue" vlink="purple">
<div class="WordSection1">
<p class="MsoNormal">Hi<o:p></o:p></p>
<p class="MsoNormal">If a Range request is sent to nginx proxy (e.g. header “Range: bytes=50-“) and the file isn’t in cache yet (cache MISS), the range is ignored and full file sent<o:p></o:p></p>
<p class="MsoNormal">When the file has been cached (cache HIT), Range request works as expected<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Is this the intended behaviour?<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">Please consider the following example <o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># /usr/local/nginx/sbin/nginx -V<o:p></o:p></p>
<p class="MsoNormal">nginx: nginx version: nginx/1.0.6<o:p></o:p></p>
<p class="MsoNormal">nginx: built by gcc 4.4.5 (Debian 4.4.5-8)<o:p></o:p></p>
<p class="MsoNormal">nginx: configure arguments:<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">error_log  logs/error-small.log;<o:p></o:p></p>
<p class="MsoNormal">worker_processes  2;<o:p></o:p></p>
<p class="MsoNormal">events<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">    use epoll;<o:p></o:p></p>
<p class="MsoNormal">    worker_connections  16384;<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">http<o:p></o:p></p>
<p class="MsoNormal">{<o:p></o:p></p>
<p class="MsoNormal">        include       mime.types;<o:p></o:p></p>
<p class="MsoNormal">        default_type  application/octet-stream;<o:p></o:p></p>
<p class="MsoNormal">        keepalive_timeout  65;<o:p></o:p></p>
<p class="MsoNormal">        proxy_cache_path /var/cache/nginx  levels=2:2:2  keys_zone=small:512m inactive=24h max_size=128G;<o:p></o:p></p>
<p class="MsoNormal">        resolver 8.8.8.8;<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">        server<o:p></o:p></p>
<p class="MsoNormal">        {<o:p></o:p></p>
<p class="MsoNormal">                listen       80;<o:p></o:p></p>
<p class="MsoNormal">                server_name  _;<o:p></o:p></p>
<p class="MsoNormal">                location /<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                        proxy_pass         http://$http_X_Backend:$http_X_Backend_Port;<o:p></o:p></p>
<p class="MsoNormal">                        proxy_cache        small;<o:p></o:p></p>
<p class="MsoNormal">                        proxy_cache_valid  200 302  10y;<o:p></o:p></p>
<p class="MsoNormal">                        proxy_cache_valid  404      10m;<o:p></o:p></p>
<p class="MsoNormal">                        proxy_cache_key         $uri;<o:p></o:p></p>
<p class="MsoNormal">                        proxy_cache_min_uses    10;<o:p></o:p></p>
<p class="MsoNormal">                        proxy_cache_use_stale updating;<o:p></o:p></p>
<p class="MsoNormal">                        add_header X-Cached $upstream_cache_status;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">                error_page   500 502 503 504  /50x.html;<o:p></o:p></p>
<p class="MsoNormal">                location = /50x.html<o:p></o:p></p>
<p class="MsoNormal">                {<o:p></o:p></p>
<p class="MsoNormal">                        root   html;<o:p></o:p></p>
<p class="MsoNormal">                }<o:p></o:p></p>
<p class="MsoNormal">        }<o:p></o:p></p>
<p class="MsoNormal">}<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># wget -SO /dev/null --header="X-Backend: download.thinkbroadband.com" --header="X-Backend-Port: 80" --header="Range: bytes=50-" localhost/5MB.zip<o:p></o:p></p>
<p class="MsoNormal">--2011-09-13 11:33:45--  http://localhost/5MB.zip<o:p></o:p></p>
<p class="MsoNormal">Resolving localhost... ::1, 127.0.0.1<o:p></o:p></p>
<p class="MsoNormal">Connecting to localhost|127.0.0.1|:80... connected.<o:p></o:p></p>
<p class="MsoNormal">HTTP request sent, awaiting response...<o:p></o:p></p>
<p class="MsoNormal">  HTTP/1.1 200 OK<o:p></o:p></p>
<p class="MsoNormal">  Server: nginx/1.0.6<o:p></o:p></p>
<p class="MsoNormal">  Date: Tue, 13 Sep 2011 10:33:45 GMT<o:p></o:p></p>
<p class="MsoNormal">  Content-Type: application/zip<o:p></o:p></p>
<p class="MsoNormal">  Connection: keep-alive<o:p></o:p></p>
<p class="MsoNormal">  Last-Modified: Mon, 02 Jun 2008 15:30:42 GMT<o:p></o:p></p>
<p class="MsoNormal">  ETag: "11f000b-500000-44eb0adaf4c80"<o:p></o:p></p>
<p class="MsoNormal">  Accept-Ranges: bytes<o:p></o:p></p>
<p class="MsoNormal">  Content-Length: 5242880<o:p></o:p></p>
<p class="MsoNormal">  X-Cached: MISS<o:p></o:p></p>
<p class="MsoNormal">Length: 5242880 (5.0M) [application/zip]<o:p></o:p></p>
<p class="MsoNormal">Saving to: `/dev/null'<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal">(try 9 more times to get it cached)<o:p></o:p></p>
<p class="MsoNormal"><o:p> </o:p></p>
<p class="MsoNormal"># wget -SO /dev/null --header="X-Backend: download.thinkbroadband.com" --header="X-Backend-Port: 80" --header="Range: bytes=50-" localhost/5MB.zip<o:p></o:p></p>
<p class="MsoNormal">--2011-09-13 11:33:11--  http://localhost/5MB.zip<o:p></o:p></p>
<p class="MsoNormal">Resolving localhost... ::1, 127.0.0.1<o:p></o:p></p>
<p class="MsoNormal">Connecting to localhost|127.0.0.1|:80... connected.<o:p></o:p></p>
<p class="MsoNormal">HTTP request sent, awaiting response...<o:p></o:p></p>
<p class="MsoNormal">  HTTP/1.1 206 Partial Content<o:p></o:p></p>
<p class="MsoNormal">  Server: nginx/1.0.6<o:p></o:p></p>
<p class="MsoNormal">  Date: Tue, 13 Sep 2011 10:33:11 GMT<o:p></o:p></p>
<p class="MsoNormal">  Content-Type: application/zip<o:p></o:p></p>
<p class="MsoNormal">  Content-Length: 5242830<o:p></o:p></p>
<p class="MsoNormal">  Connection: keep-alive<o:p></o:p></p>
<p class="MsoNormal">  Last-Modified: Mon, 02 Jun 2008 15:30:42 GMT<o:p></o:p></p>
<p class="MsoNormal">  ETag: "11f000b-500000-44eb0adaf4c80"<o:p></o:p></p>
<p class="MsoNormal">  X-Cached: HIT<o:p></o:p></p>
<p class="MsoNormal">  Content-Range: bytes 50-5242879/5242880<o:p></o:p></p>
</div>
</body>
</html>