We have a lot of videos. Some of them of 500Mb, and when the users want to dowload them, varnish close the connection before the file is fully downloaded. We know this is the problem cause everytime we receive the same file but with differents sizes. If the connection is slow, the file is smaller. I really can't figure where the problem is...<div>

<br></div><div>This is the configuration I have:</div><div><br></div><div><div><div><font face="courier new, monospace">backend app01 {</font></div><div><font face="courier new, monospace">  .host = "<a href="http://app01.xxxxxx.com">app01.xxxxxx.com</a>";</font></div>

<div><font face="courier new, monospace">  .port = "80";</font></div><div><font face="courier new, monospace">  .connect_timeout = 1.5s;</font></div><div><font face="courier new, monospace">  .first_byte_timeout = 45s;</font></div>

<div><font face="courier new, monospace">  .between_bytes_timeout = 30s;</font></div><div><font face="courier new, monospace">  .probe = {</font></div><div><font face="courier new, monospace">    .url = "/";</font></div>

<div><font face="courier new, monospace">    .interval = 5s;</font></div><div><font face="courier new, monospace">    .timeout = 1s;</font></div><div><font face="courier new, monospace">    .window = 5;</font></div><div>
<font face="courier new, monospace">    .threshold = 3;</font></div>
<div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace">director app_director round-robin {</font></div><div><font face="courier new, monospace">  { .backend = app01; }   </font></div>

<div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">#acl internal {</font></div><div><font face="courier new, monospace">#  "localhost";</font></div>

<div><font face="courier new, monospace">#  "127.0.0.1";</font></div><div><font face="courier new, monospace">#}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">acl purge {</font></div>

<div><font face="courier new, monospace">        "localhost";</font></div><div><font face="courier new, monospace">        "192.168.11.0"/24;</font></div><div><font face="courier new, monospace">}</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_recv {</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  if (req.request == "PURGE") {</font></div>

<div><font face="courier new, monospace">    if (!client.ip ~ purge) {</font></div><div><font face="courier new, monospace">      error 405 "Not allowed.";</font></div><div><font face="courier new, monospace">    }</font></div>

<div><font face="courier new, monospace">    ban("req.url = " + req.url);</font></div><div><font face="courier new, monospace">    return (lookup);</font></div><div><font face="courier new, monospace">  }</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Normalize the host header</font></div><div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.http.Host ~ "(?i)^(www.)?<a href="http://xxxxx.com">xxxxx.com</a>") {</font></div>

<div><font face="courier new, monospace">    set req.http.host = "<a href="http://www.xxxxxxx.com">www.xxxxxxx.com</a>";</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">  </font></div>

<div><font face="courier new, monospace">  # Use anonymous, cached pages if all backends are down.</font></div><div><font face="courier new, monospace">  if (! req.backend.healthy) {</font></div><div><font face="courier new, monospace">    unset req.http.Cookie;</font></div>

<div><font face="courier new, monospace">    set req.grace = 1h;</font></div><div><font face="courier new, monospace">  } else {</font></div><div><font face="courier new, monospace">    set req.grace = 30s;</font></div><div>

<font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Add the X-Forwarded-For header</font></div><div><font face="courier new, monospace">  # --</font></div>

<div><font face="courier new, monospace">  if (req.restarts == 0) {</font></div><div><font face="courier new, monospace">    if (req.http.x-forwarded-for) {</font></div><div><font face="courier new, monospace">      set req.http.X-Forwarded-For = req.http.X-Forwarded-For + ", " + client.ip;</font></div>

<div><font face="courier new, monospace">    } else {</font></div><div><font face="courier new, monospace">      set req.http.X-Forwarded-For = client.ip;</font></div><div><font face="courier new, monospace">    }</font></div>

<div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Sanely handle the request based on the type</font></div><div>

<font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.request != "GET" &&</font></div><div><font face="courier new, monospace">   req.request != "HEAD" &&</font></div>

<div><font face="courier new, monospace">   req.request != "PUT" &&</font></div><div><font face="courier new, monospace">   req.request != "POST" &&</font></div><div><font face="courier new, monospace">   req.request != "TRACE" &&</font></div>

<div><font face="courier new, monospace">   req.request != "OPTIONS" &&</font></div><div><font face="courier new, monospace">   req.request != "DELETE") {</font></div><div><font face="courier new, monospace">    /* Non-RFC2616 or CONNECT which is weird. */</font></div>

<div><font face="courier new, monospace">    return (pipe);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Request by post needs no cache</font></div>

<div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.request == "POST") {</font></div><div><font face="courier new, monospace">    return (pass);</font></div>

<div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Admin needs no cache</font></div><div><font face="courier new, monospace">  # --</font></div>

<div><font face="courier new, monospace">  if (req.http.Host ~ "(?i)^(admin.)?<a href="http://xxxxxx.com">xxxxxx.com</a>") {</font></div><div><font face="courier new, monospace">    return (pass);</font></div><div>

<font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">    </font></div><div><font face="courier new, monospace">  # Always cache the following file types for all users.</font></div>
<div>
<font face="courier new, monospace">  if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|flv|avi|mov|wmv|css|js|html|htm)(\?[a-z0-9]+)?$") {</font></div><div><font face="courier new, monospace">    unset req.http.Cookie;</font></div>

<div><font face="courier new, monospace">    return (lookup);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Login and logout needs no cache</font></div>

<div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.url ~ "^/usuario/salir" || req.url ~ "^/usuario/redirectWindow" || req.url ~ "^/usuario/al") { </font></div>

<div><font face="courier new, monospace">    return (pass);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">  </font></div><div><font face="courier new, monospace">  # No save at cache the user profile</font></div>

<div><font face="courier new, monospace">  if (req.url ~ "^/usuario/([0-9]+)/(.*?)/") {</font></div><div><font face="courier new, monospace">    return (pass);</font></div><div><font face="courier new, monospace">  }</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Requests to /no-cache/ needs no cache</font></div><div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.request == "GET" && req.url ~ "^/no-cache") {</font></div>

<div><font face="courier new, monospace">    return (pass);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">  if (req.request == "GET" && req.url ~ "^/rss/xxxxx") {</font></div>

<div><font face="courier new, monospace">    return (pass);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Not sure what could match here, but it's in the default.vcl</font></div>

<div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.request != "GET" && req.request != "HEAD") {</font></div><div><font face="courier new, monospace">    /* We only deal with GET and HEAD by default */</font></div>

<div><font face="courier new, monospace">    return (pass);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Handle compression correctly. Different browsers send different</font></div>

<div><font face="courier new, monospace">  # "Accept-Encoding" headers, even though they mostly all support the same</font></div><div><font face="courier new, monospace">  # compression mechanisms. By consolidating these compression headers into</font></div>

<div><font face="courier new, monospace">  # a consistent format, we can reduce the size of the cache and get more hits.=</font></div><div><font face="courier new, monospace">  # @see: http:// <a href="http://varnish.projects.linpro.no/wiki/FAQ/Compression">varnish.projects.linpro.no/wiki/FAQ/Compression</a></font></div>

<div><font face="courier new, monospace">  if (req.http.Accept-Encoding) {</font></div><div><font face="courier new, monospace">    if (req.http.Accept-Encoding ~ "gzip") {</font></div><div><font face="courier new, monospace">      # If the browser supports it, we'll use gzip.</font></div>

<div><font face="courier new, monospace">      set req.http.Accept-Encoding = "gzip";</font></div><div><font face="courier new, monospace">    }</font></div><div><font face="courier new, monospace">    else if (req.http.Accept-Encoding ~ "deflate") {</font></div>

<div><font face="courier new, monospace">      # Next, try deflate if it is supported.</font></div><div><font face="courier new, monospace">      set req.http.Accept-Encoding = "deflate";</font></div><div><font face="courier new, monospace">    }</font></div>

<div><font face="courier new, monospace">    else {</font></div><div><font face="courier new, monospace">      # Unknown algorithm. Remove it and send unencoded.</font></div><div><font face="courier new, monospace">      unset req.http.Accept-Encoding;</font></div>

<div><font face="courier new, monospace">    }</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Cache all requests by default, overriding the standard Varnish behavior</font></div>

<div><font face="courier new, monospace">  if (req.request == "GET" || req.request == "HEAD") {</font></div><div><font face="courier new, monospace">    /* We only deal with GET and HEAD by default */</font></div>

<div><font face="courier new, monospace">    #unset req.http.Cookie;</font></div><div><font face="courier new, monospace">    return (lookup);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">  # If there's a cookie left aft this point do not cache</font></div><div><font face="courier new, monospace">  # or is this easier to keep in the cookie deletion above?</font></div>

<div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if (req.http.Authorization || req.http.Cookie) {</font></div><div><font face="courier new, monospace">    /* Not cacheable by default */</font></div>

<div><font face="courier new, monospace">    return (pass);</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # If we get here, try the cache</font></div>

<div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  return (lookup);</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">}</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_pipe {</font></div><div><font face="courier new, monospace">  return (pipe);</font></div><div><font face="courier new, monospace">}</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_pass {</font></div><div><font face="courier new, monospace">  return (pass);</font></div><div><font face="courier new, monospace">}</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_hash {</font></div><div><font face="courier new, monospace">  # Include cookie in cache hash.</font></div><div><font face="courier new, monospace">  # This check is unnecessary because we already pass on all cookies.</font></div>

<div><font face="courier new, monospace">  #if (req.http.Cookie) {</font></div><div><font face="courier new, monospace">  #  #set req.hash += req.http.Cookie;</font></div><div><font face="courier new, monospace">  #  hash_data(req.http.Cookie);</font></div>

<div><font face="courier new, monospace">  #}</font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_hit {</font></div>

<div><font face="courier new, monospace">  if (req.request == "PURGE") {</font></div><div><font face="courier new, monospace">    purge;</font></div><div><font face="courier new, monospace">    error 200 "Purged";</font></div>

<div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_miss {</font></div>

<div><font face="courier new, monospace">  if (req.request == "PURGE") {</font></div><div><font face="courier new, monospace">    purge;</font></div><div><font face="courier new, monospace">    error 200 "Purged";</font></div>

<div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_fetch {</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"> </font></div><div><font face="courier new, monospace">  # remove all cookies</font></div><div><font face="courier new, monospace">  # unset beresp.http.set-cookie;</font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # cache for 12 hours</font></div><div><font face="courier new, monospace">  # set beresp.ttl = 2h;</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">  # Don't allow static files to set cookies.</font></div><div><font face="courier new, monospace">  if (req.url ~ "(?i)\.(png|gif|jpeg|jpg|ico|swf|css|js|html|htm|mp4|flv)(\?[a-z0-9]+)?$") {</font></div>

<div><font face="courier new, monospace">    unset beresp.http.set-cookie;</font></div><div><font face="courier new, monospace">    set beresp.ttl = 12h;</font></div><div><font face="courier new, monospace">  } else {</font></div>

<div><font face="courier new, monospace">    set beresp.ttl = 30m;</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # If the backend server doesn't return properly, don't send another connection to it</font></div>

<div><font face="courier new, monospace">  # for 60s and try another backend via restart.</font></div><div><font face="courier new, monospace">  #</font></div><div><font face="courier new, monospace">  # <a href="https://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html">https://www.varnish-cache.org/docs/trunk/tutorial/handling_misbehaving_servers.html</a></font></div>

<div><font face="courier new, monospace">  # --</font></div><div><font face="courier new, monospace">  if(beresp.status == 500 || beresp.status == 503) {</font></div><div><font face="courier new, monospace">  if (req.restarts > 3) {</font></div>

<div><font face="courier new, monospace">      set beresp.saintmode = 5m;</font></div><div><font face="courier new, monospace">    }</font></div><div><font face="courier new, monospace">    if (req.request != "POST") {</font></div>

<div><font face="courier new, monospace">      return(restart);</font></div><div><font face="courier new, monospace">    } else {</font></div><div><font face="courier new, monospace">      error 500 "Failed";</font></div>

<div><font face="courier new, monospace">    }</font></div><div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  # Allow items to be stale if needed.</font></div>

<div><font face="courier new, monospace">  set beresp.grace = 1h;</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace">sub vcl_deliver {</font></div><div><font face="courier new, monospace"> # if (resp.http.magicmarker) {</font></div><div><font face="courier new, monospace"> #   unset resp.http.magicmarker;</font></div>

<div><font face="courier new, monospace"> #   set resp.http.age = "0";</font></div><div><font face="courier new, monospace"> # }</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">  if (obj.hits > 0) {</font></div>

<div><font face="courier new, monospace">    set resp.http.X-Cache = "HIT";</font></div><div><font face="courier new, monospace">  } else {</font></div><div><font face="courier new, monospace">    set resp.http.X-Cache = "MISS";</font></div>

<div><font face="courier new, monospace">  }</font></div><div><font face="courier new, monospace">  return (deliver);</font></div><div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace"># In the event of an error, show friendlier messages.</font></div><div><font face="courier new, monospace">sub vcl_error {</font></div><div><font face="courier new, monospace">  # Otherwise redirect to the homepage, which will likely be in the cache.</font></div>

<div><font face="courier new, monospace">  set obj.http.Content-Type = "text/html; charset=utf-8";</font></div><div><font face="courier new, monospace">  synthetic {"</font></div><div><font face="courier new, monospace"><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "<a href="http://www.w3.org/TR/html4/loose.dtd">http://www.w3.org/TR/html4/loose.dtd</a>"></font></div>

<div><font face="courier new, monospace"><html></font></div><div><font face="courier new, monospace"><head></font></div><div><font face="courier new, monospace"><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"></font></div>

<div><font face="courier new, monospace"><title>..:: XXXXX :: Por el momento estamos en mantenimiento</font></div><div><font face="courier new, monospace"><span class="Apple-tab-span" style="white-space:pre">        </span>::..</title></font></div>

<div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace"></head></font></div><div><font face="courier new, monospace"><body></font></div><div><font face="courier new, monospace"><br>

</font></div><div><font face="courier new, monospace"><span class="Apple-tab-span" style="white-space:pre"> </span><div class="logo">En mantenimiento</div></font></div><div><font face="courier new, monospace"><span class="Apple-tab-span" style="white-space:pre">      </span><div class="text">Estamos experimentando problemas. Vuelve</font></div>

<div><font face="courier new, monospace"><span class="Apple-tab-span" style="white-space:pre">          </span>m&aacute;s tarde.</div></font></div><div><font face="courier new, monospace">    <div style="display:none;">(Error "} + obj.status + " " + obj.response + {")</div></font></div>

<div><font face="courier new, monospace"></body></font></div><div><font face="courier new, monospace"></html></font></div><div><font face="courier new, monospace">"};</font></div><div><font face="courier new, monospace">  return (deliver);</font></div>

<div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_init {</font></div><div><font face="courier new, monospace">  return (ok);</font></div>

<div><font face="courier new, monospace">}</font></div><div><font face="courier new, monospace"><br></font></div><div><font face="courier new, monospace">sub vcl_fini {</font></div><div><font face="courier new, monospace">  return (ok);</font></div>

<div><font face="courier new, monospace">}</font></div></div></div><div><br></div>