защита от hotlink c nginx ( Debian , CentOS )

Posted in Новости on 13 декабря, 2010 by admin

Появилась потребность поставить защиту от хотлинков , когда nginx работает в связке с апачем ( nginx стоит фронтендом ). Все решения выглядели вот так :

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

но при добавлении локейшена с подправленным valid_referers и расширениями изображения не отдавались и на наш хост, что не есть гуд. Очень долго ворошил интернет, но все ответы были однотипными. Ошибка заключается вот в чем :

с локейшеном — location ~ \.(jpg|png|gif)$ в еррор логе nginx идет вот такая запись :

2010/12/13 12:11:58 [error] 16362#0: *110 open() «/usr/local/nginx/html/comedy/009.jpg» failed (2: No such file or directory),
2010/12/13 12:11:59 [error] 16362#0: *110 open() «/usr/local/nginx/html/comedy/009.jpg» failed (2: No such file or directory),

что свидетельствует нам о некорректности пути. Подправив локейшен был приятно удивлен работоспособностью правила =) . Корректное правило :

location ~* ^.+\.(svg|mp3|ogg|mpe?g|zip|gz|bz2?|rar|jpg|png|gif|jpeg|flv)$ {
root /path/to/site/;
valid_referers none blocked server_names ;
if ($invalid_referer) {
return 403;
}
}

PS для работы должен быть включен в состав nginx модуль — ngx_http_referer_module , который по-умолчанию включен. при конфигурации отсутствие —without-http_referer_module говорит нам, что этот модуль есть.

Приятных блокировок ! =)

Tags: , , ,