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