403 dla określonych refererów w nginx

W serwisie klienta jest dużo plików graficznych, które są hotlinkowane. Generalnie klientowi to nie przeszkadza, bo uważa, że sieć jest od tego żeby się dzielić. Jest jedno ale. Jest parę serwisów które mają na tyle dużą oglądalność, że umieszczone tam grafiki pochłaniają po prostu za dużo pasma i należało by je zablokować.

Serwis serwowany jest za pomocą nginx‚a. Samo blokowanie hotlinków jest bardzo proste i w całej sieci można znaleźć mnóstwo przykładów, różniących się warunkiem w location, które sprowadzają się do następującej konfiguracji:

location ~ \.(jpg|png|gif)$ {
valid_referers server_names blocked none frienddomain.com *.frienddomain.com;
if ($invalid_referer) {
return 403;
}
}

W której wpisujemy listę dopuszczonych do hotlinkowania domen, pamiętając o słówku none, które oznacza brak referera.

Ale tak jak pisałem wcześniej, klient chciał zablokować tylko określone domeny, niech to będą foo.ba i bar.fo. Konfiguracja ostatecznie wygląda w taki sposób:

location / {
if ($http_referer ~* "foo.ba|bar.fo" ) {
rewrite .* /foo/ last;
}
[...]
}
location /foo {
return 403;
}

Published by Marcin Pietrzak

Lorem ipsum dolor sit amet, consectetur adipiscing elit. Duis nec ante nec lectus laoreet feugiat. Donec aliquet justo in tellus gravida, id elementum magna convallis. Curabitur faucibus mauris sed risus egestas lobortis. Nunc vestibulum elit ac ipsum ultricies, non ultrices lorem ultrices. Nam at dolor id elit lobortis ullamcorper. Fusce commodo turpis nisi, efficitur efficitur libero dictum eget. Morbi viverra dignissim lacus. Vestibulum mi justo, dictum ut iaculis eget, scelerisque et nibh.

Przeczytaj poprzedni wpis:
Wtyczka do wyświetlania wszystkich tagów

Co zrobić, żeby utworzyć stronę zawierającą listę wszystkich tagów? Zainstalować wtyczkę, która pozwala na utworzenie strony lub wpisu w celu...

Zamknij