Jan 212015
 

Sur varnish 3, il fallait ajouter du code c pour ajouter le header Expires correspondant au max-age du Cache-Control :
Varnish : transformer le Cache-Control : max-age en Expires

Maintenant une ligne suffit :
Dans le vcl_backend_response :

if (beresp.http.cache-control ~ "max-age=" ) {
        set beresp.http.Expires = "" + (now + std.duration(regsub(beresp.http.cache-control,"max-age=([0-9]+).*$","\1")+"s", 0s));
}

ou dans le vcl_deliver :

if (resp.http.cache-control ~ "max-age=" ) {
        set resp.http.Expires = "" + (now + std.duration(regsub(resp.http.cache-control,"max-age=([0-9]+).*$","\1")+"s", 0s));
}
Sep 302012
 

Création de l’Expires à partir du cache-control max-age si il est présent et différent de 0, puis suppression du max-age.

Ajoutez au début de la configuration :

C{
        #include <string.h>
        #include <stdlib.h>
 
        void TIM_format(double t, char *p);
        double TIM_real(void);
}C

Et dans le vcl_deliver :

if ( resp.http.Cache-Control ~ "max-age" && ! resp.http.Cache-Control ~ "max-age=0" ) {
        C{
                 char *cache = VRT_GetHdr(sp, HDR_RESP, "\016cache-control:");
                 char date[40];
                 int max_age = -1;
                 int want_equals = 0;
                 if(cache) {
                         while(*cache != '\0') {
                                 if (want_equals && *cache == '=') {
                                         cache++;
                                         max_age = strtoul(cache, 0, 0);
                                         break;
                                  }
                                  if (*cache == 'm' && !memcmp(cache, "max-age", 7)) {
                                         cache += 7;
                                         want_equals = 1;
                                         continue;
                                  }
                         cache++;
                         }
                         if (max_age != -1) {
                                 TIM_format(TIM_real() + max_age, date);
                                 VRT_SetHdr(sp, HDR_RESP, "\010Expires:", date, vrt_magic_string_end);
                         }
                 }
        }C
        set resp.http.Cache-Control = regsuball(resp.http.Cache-Control,"max-age=[0-9]+(,)?", "");
        if ( resp.http.Cache-Control ~ "^$") {
                 unset resp.http.Cache-Control;
        }
}

Source : https://www.varnish-cache.org/trac/wiki/VCLExampleSetExpires