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); } }