Au taff nous utilisons le fabuleux Varnish-qui-te-sauve-le-fion-quand-tes-devs-ne-savent-pas-coder devant nos serveurs web qui servent le contenu PHP et SSI/HTML pur, car en effet chez nous on génère des versions "statiques" (HTML ou HTML+SSI) des pages les plus récentes — et donc sur des sites de news, potentiellement les plus souvent demandées — et on m'a récemment demandé si il était possible que lorsqu'une URL est requêtée Varnish interroge le backend Apache HTML+SSI en premier lieu, et seulement s'il n'existe pas de version statique de la page (et donc qu'il obtient un code HTTP 404 du backend) qu'il interroge directement le backend PHP pour obtenir la version dynamique de la page.

Alors ouuiiiiii il est tout à fait possible de contourner le problème en déportant cette vérification au niveau du backend HTML+SSI (une RewriteCond qui vérifie que le fichier existe physiquement dans le DocumentRoot du vhost et si non, ProxyPass vers le backend PHP) mais je voulais voir si il était possible de le faire directement avec Varnish, genre Like a boss quoi. Et force est de reconnaitre que c'est faisable très facilement, par exemple comme ceci :

backend apache_ssi {
    .host = "10.0.0.1";
    .port = "80";
}

backend apache_php {
    .host = "10.0.0.2";
    .port = "80";
}

sub vcl_recv {
	if(req.restarts == 0){
		set req.backend = apache_ssi;
	}
	elseif(req.restarts == 1){
		set req.backend = apache_php;
	}
}

sub vcl_fetch {
    if(beresp.status == 404) {
	restart;
    }
}

Z'avouerez que troue l'cul de simplicité, quand même. Pour l'inspiration, c'était ici.