Varnish 4.x : comment faire un redirect
Après avoir passé plusieurs heures sans aucune réponse satisfaisante, j’ai enfin trouvé la solution du redirect.
Varnish n’a pas la possibilité de faire un redirect « simplement », il faut normalement laisser cela au « backend », c’est à dire au serveur derrière (Apache ou autre).
Mais moi je ne voulais pas. C’est mon droit non ?
Voici comment faire un redirect qui fonctionne :
sub vcl_recv {
# Rediriger tous les ".fr" vers ".com"
if (
(req.http.host ~ "(.*)monsite\.fr$")
) {
# ! error = envoyer vers la sous-routine "vcl_error"
set req.http.x-redir = "http://www.bb.com" + req.url;
return(synth(850, "Moved permanently"));
}
}
L’astuce principale était : utiliser vcl_synth
D’après le code, je vous résume ce que j’ai compris : si jamais on a un status 850 qui semble être un ordre particulier, alors automatiquement changer les headers en y appliquant la redirection, et les renvoyer directement le résultat.
Donc, après la routine vcl_recv il vous suffit d’ajouter vcl_synth comme ceci :
sub vcl_synth {
if (resp.status == 850) {
set resp.http.Location = req.http.x-redir;
set resp.status = 302;
return (deliver);
}
}