<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>