защита от hotlink c nginx ( Debian , CentOS )
Появилась потребность поставить защиту от хотлинков , когда 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: CentOS, Debian, hotlink, nginx
может так лучше
server {
…
location ~ \.(jpg|gif|png)$ {
valid_referers none blocked server_names ~\.google\. images.yandex.ru;
if ($invalid_referer) {
return 403;
}
}
}
или в принципе можно сервер найм пустым оставить? я вот думаю а надо ли чтобы гугл и яндекс картинки парсили
Вообще иногда и за счет картинок увеличивается посещаемость ( если они уникальны ), но пока на каких серверах не ставил защиту, хуже не было.
а вопросики так и должно быть?
mpe?g
Ребят как узнать работает nginx в связке с апачем у меня на сервере или нет? Просто не совсем разбираюсь в этом вопросе. А недавно переехал на VPS/ И встал вопрос о хотлинке. Но обычное редактирование файла htaccess не помогает. Судя по phpinfo() у меня Apache Version: Apache/2.2.9 (Debian) если через консоль поглядеть top то там присутствует процесс nginx.
проще всего через ssh :
netstat -plnt
будет видно.
Николай, ввел netstat -plnt, в результатах нашел такую строчку:
tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 501/nginx
Это оно? Если оно, тогда подскажите пожалуйста, где именно прописывать, то что вы описали в заметке?
Да, nginx у Вас висит на 80 порту, а апач стоит бекендом скорее всего на 8080. Крайне советую Вам нанять администратора, хотя бы на час, так как отсутствие понимания в данном вопросе может привести к неправильной конфигурации nginx и неработоспособности всех сайтов. Говорю это не в силу того, что сам администрирую сервера, а в силу того, что видел очень много раз, как клиенты нападали с проблемами с подобным конфигом. Еще проще — попросите вашего хостера сделать подобное, тут работы максимум минут на 5.
В принципе основной конфиг nginx — /etc/nginx/nginx.conf ( это при конфигурировании панелью ISPmanager )
Николай, спасибо за помощь! Все заработало — вставил в конфиг :
location ~* ^.+\.(svg|mp3|ogg|mpe?g|zip|gz|bz2?|rar|jpg|png|gif|jpeg|flv)$ {
root /var/data/www/fishing.lugansk.ua/;
valid_referers none blocked server_names ;
if ($invalid_referer) {
rewrite ^(.*)$ /images/antilich.jpg redirect;
}
}
только почему то картинка images/antilich.jpg не подменяется. И еще вопрос а как к примеру быть с поисковиками данный код позволяет индексировать картинки?
эту конструкцию нужно вставлять первым локейшеном в виртхосте. Изображения индексироваться не будут, либо вносите в valid_referers домены поисковиков нужных.
Искала правильное решение и — нашла только в вашем блоге. Спасибо большое!
Хорошо, когда информация приносит пользу =)
У меня вот аткая конструкция работает, но есть вопрос, у меня сайт https и хотлинки которые идут по такой ссылке http://cайт.ru/картинка.png блокируются, но хотлинки https://сайт.ru/картинка.png не блокируются =(
location ~* ^.+\.(jpeg|jpg|png|gif|bmp|ico|svg|tif|tiff|css|js|htm|html|ttf|otf|webp|woff|txt|csv|rtf|doc|docx|xls|xlsx|ppt|pptx|odf|odp|ods|odt|pdf|psd|ai|eot|eps|ps|zip|tar|tgz|gz|rar|bz2|7z|aac|m4a|mp3|mp4|ogg|wav|wma|3gp|avi|flv|m4v|mkv|mov|mpeg|mpg|wmv|exe|iso|dmg|swf)$ {
root /путь до/сайта;
valid_referers none blocked server_names ~(yandex|google|yahoo|bing|facebook|fbcdn);
if ($invalid_referer) {
rewrite (.*)\.(jpg|jpeg|png|gif)$ https://положил картинку на стронний сервис которая будет отображаться как запрет хотлинка;
}