Защита изображений от хотлинка на NGINX
Рано или поздно все владельцы сайтов сталкиваются с воровством контента с их сайтов. Как правило, чем популярнее ресурс, тем больше шансов, что у вас будут копировать контент и изображения.
Однако жулики иногда настолько ленивы, что воруют только текст со страниц, оставляя в нем ссылки на изображения находящиеся на вашем сайте. И в этом случае вы можете усложнить жизнь любителям брать чужое, запретив вашим изображениям отображаться на чужих сайтах.
Вы скажете магия? Как такое возможно? В этой статье я приведу пример для веб-сервера NGINX.
Защита от Hotlink в NGINX
Если вы используете NGINX как фронтенд вашего сервера, то добавьте следующие строки в конфигурационный файл:
location ~ .(gif|png|jpeg|jpg|svg)$ { valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. yourdomain.com *.yourdomain.com; if ($invalid_referer) { return 403; } }
где yourdomain.com — имя домена вашего сайта.
После этого перезагрузите NGINX.
Как работает эта конфигурация
В строке location вы указываете расширения файлов на которые распространяется данное правило. В строке valid_referers none blocked перечислены домены которым разрешено показывать ваши изображения. Условие if ($invalid_referer) говорит о действии для всех других доменов вне разрешенного списка. В нашем примере сервер отправит ошибку 403, что говорит о том, что доступ к файлу запрещен. Сайт злоумышленника останется в таком случае без изображений с вашего сайта.
Как усложнить жизнь жуликам
Можно пойти дальше и испортить настроение жуликам ворующим ваши изображения, а заодно и предупредить посетителей, что они находятся на сайте владелец которого использует ваши изображения. Для этого вместо ошибки 403 сервер может отдать другое изображение, например с посланием для посетителей.
location ~ .(gif|png|jpeg|jpg|svg)$ { valid_referers none blocked ~.google. ~.bing. ~.yahoo. ~.yandex. yourdomain.com *.yourdomain.com; if ($invalid_referer) { rewrite ^(.*)$ https://anotherdomain.com/hotlink.jpg break; break; } }
В данном примере для всех запрещенных доменов вместо всех изображений вашим сервером будет показываться картинка-заглушка находящаяся по адресу https://anotherdomain.com/hotlink.jpg. Например такая:
Если вы где-то видели эту картинку, то скорее всего владелец такого сайта ворует у меня контент и/или изображения.
Что такое хотлинкинг
Технология хотлинкинга проста. Вы находите изображение в Интернете и используете URL-адрес изображения непосредственно на своем сайте. Это изображение будет отображаться на вашем веб-сайте, но оно будет отправлено с исходного места. Это очень удобно так как не нужно переносить изображение к себе на сайт, но это на самом деле кража, поскольку вы используете ресурсы чужого сайта.
Почему хотлинкинг это плохо
Если отбросить моральную сторону воровства, то защищаться от HotLinking нужно по следующим причинам:
- Жулики используют ресурсы вашего сервера для показа изображений, в частности трафик, что может вызвать финансовые потери с вашей стороны.
- Хотлинкинг создает дополнительную нагрузку на хостинг, это может привезти к недоступности вашего сайта и соседей на сервере.
Благодарности
При написании статьи были использованы следующие источники:
«Если отбросить моральную сторону воровства…»
Хотлинк — это не воровство контента (ссылка-то на оригинал), а воровство трафика и неправомерное использование чужих вычислительных мощностей. Воровство — это скачивание и загрузка картинки на другой сайт, в том числе под другим именем файла. Это плохо ещё и тем, что теряется уникальность сайта и контента, в результате сайт-оригинал может «упасть» в поисковой выдаче или даже попасть под санкции поисковиков, если копий будет много.
Жулику ничего не мешает в поиске найти картинку, сделать скриншот и вставить картинку на свой сайт.