Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Next revision
Previous revision
appnotes:varnishmirror [2009/05/19 09:17]
crackerjackmack created
appnotes:varnishmirror [2009/05/21 07:53]
crackerjackmack fixed a bug with dead backends
Line 6: Line 6:
   * Primary repository for OS updates   * Primary repository for OS updates
   * Anycast installation HTTP servers for larger deployments   * Anycast installation HTTP servers for larger deployments
 +  * Booting test images w/o uploading to remote server
  
  
Line 23: Line 24:
 <code C> <code C>
 backend kernelorg_1 {                                                                                      backend kernelorg_1 {                                                                                     
 +        #.host = "​mirrors.kernel.org";​
         .host = "​149.20.20.135"; ​                                                                         ​         .host = "​149.20.20.135"; ​                                                                         ​
-        #.host = "​mirrors.kernel.org"; ​                                                                   ​ 
         .port = "​80"; ​                                                                                             .port = "​80"; ​                                                                                    
-        .probe = {                                                                                         +        .probe = { 
-                .request =                                                                                 +                .request = 
-                "HEAD /index.html HTTP/​1.1" ​                                                              ​ +                "HEAD /index.html HTTP/​1.1"​ 
-                "Host: mirrors.kernel.org" ​                                                                +                "Host: mirrors.kernel.org"​ 
-                "​Connection:​ close"; ​                                                                      +                "​Connection:​ close";​ 
-                .timeout = 0.3 s;                                                                         ​ +                .timeout = 0.3 s; 
-                .window = 8;                                                                               +                .window = 8; 
-                .threshold = 3;                                                                           ​ +                .threshold = 3; 
-        }                                                                                                 ​ +        } 
-                                                                                                        ​+}
  
 backend kernelorg_2 {  backend kernelorg_2 { 
Line 52: Line 53:
 }                                          ​ }                                          ​
  
 +// A director acts as a router for backends
 director ubuntu random { director ubuntu random {
         # { .backend = ubuntu_us_1;​ .weight = 1; }         # { .backend = ubuntu_us_1;​ .weight = 1; }
Line 65: Line 67:
 sub vcl_recv { sub vcl_recv {
  
-        // Skip repository files+        ​// BACKEND declarations have to happen first so that dead hosts are  
 +        // properly excluded 
 + 
 +        // In this case, all these base directories are handled by this single  
 +        // backend. ​ It could also look like req.host ~ "​linux.etherboot.org"​ 
 +        // for virtual host based setups 
 +        if ( req.url ~ "​^/​(ubuntu|debian|centos|opensuse|suse|fedora|gentoo)"​ ) { 
 +                set req.http.host = "​mirrors.kernel.org";​ 
 +                set req.backend = ubuntu; 
 +        } 
 + 
 +        ​// Skip repository files (apt)
         if ( req.url ~ "/​(Release|Packages|Sources)(|\.gz|\.bz2|\.gpg|)$"​) {         if ( req.url ~ "/​(Release|Packages|Sources)(|\.gz|\.bz2|\.gpg|)$"​) {
                 pass;                 pass;
         }         }
 +        // Skip repository files (yum)
         if ( req.url ~ "/​repodata/​.*"​ ) {         if ( req.url ~ "/​repodata/​.*"​ ) {
                 pass;                 pass;
         }         }
  
-        ​if ( req.url ~ "​^/​(ubuntu|debian|centos|opensuse|suse|fedora|gentoo)"​ ) { +         
-                set req.http.host = "​mirrors.kernel.org";​ +        ​// Basic housekeeping for dead backends 
-                set req.backend = ubuntu; +        // Continue serving stale files for up to an hour while the backend recovers
-        ​} +
         if (req.backend.healthy) {         if (req.backend.healthy) {
                 set req.grace = 30s;                 set req.grace = 30s;
Line 87: Line 98:
  
 sub vcl_fetch { sub vcl_fetch {
 +        // Debugging info 
         set obj.http.X-Varnish-Url = req.url;         set obj.http.X-Varnish-Url = req.url;
 +
 +        // Keep cachable objects up to 1day
         set obj.ttl = 1d;         set obj.ttl = 1d;
 +        // Serve the stale file for up to 15m while a newer version is fetched ​
         set obj.grace = 15m;         set obj.grace = 15m;
         #set beresp.grace = 15m;         #set beresp.grace = 15m;
 +        // not used yet
         set obj.prefetch = -30s;         set obj.prefetch = -30s;
 } }
  
 sub vcl_miss { sub vcl_miss {
 +        // Nasty spiders!! DIE!!  ​
         if (req.http.user-agent ~ "​spider"​) {         if (req.http.user-agent ~ "​spider"​) {
                 error 503 "Not presently in cache, please try again later";​                 error 503 "Not presently in cache, please try again later";​
Line 101: Line 118:
  
 sub vcl_deliver { sub vcl_deliver {
 +        // Debugging headers
         if (obj.hits > 0 ) {         if (obj.hits > 0 ) {
                 set resp.http.X-Cache = "​HIT";​                 set resp.http.X-Cache = "​HIT";​

QR Code
QR Code appnotes:varnishmirror (generated for current page)