Przekierowanie 301 w varnish’u 3.x z uwzględnieniem adresów URL
Napisał: Patryk Krawaczyński
04/05/2012 w Administracja Brak komentarzy. (artykuł nr 349, ilość słów: 200)
J
eśli zależy nam na wykonaniu przekierowania HTTP 301 na poziomie varnish’a np. z adresu www.domena.pl na domena.pl razem z uwzględnieniem przekazanych adresów URL w domenie www.domena.pl wystarczy w podprogramie vcl_recv odpowiedzialnym za procesowanie żądania HTTP dodać kod:
if (req.http.host == "www.domena.pl") {
error 301;
}
– spowoduje to wyłapywanie nagłówka „Host” z ustawioną wartością na: www.domena.pl, zgłoszonego przez przeglądarkę lub inny program i przekazanie całego żądania do podprogramu vcl_error, gdzie możemy obsłużyć „błąd” 301:
if (obj.status == 301 && req.http.host == "www.domena.pl") {
set obj.http.location = "http://domena.pl" + req.url;
set obj.status = 301;
return (deliver);
}
W przypadku kiedy chcemy wykonać dużo przekierowań pomiędzy dwoma domenami bez uwzględnienia adresów URL – możemy skorzystać z specjalnego rozszerzenia do varnish’a redirect, któremu wystarczy w przekazać wszystkie informacje w vcl_recv:
import redirect;
sub vcl_recv {
if (req.http.host == "www.domena.pl") {
error(redirect.location(301,"http://domena.pl"), "Moved Permanently");
}
}
Więcej informacji: Varnish Configuration Language

