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