
Выключить Hotlinking для картинок в Nginx/Apache
Что такое image hotlinking?
Image Hotlinking — очень плохая идея, т.к это будет нагружать сервер ( забивать полосу пропускания сервера). Что это означает? Это означает что если кто-то создает ссылку на изображение, то картинка отображается на их веб-сайтах и в результате чего, вы будете платить больше полосы пропускания из-за этого.
Итак, в своей теме «Выключить Hotlinking для картинок в Nginx/Apache» я обеспечю серверу на Nginx блокировку любых попыток хотлинкинга.
Конфигурации Анти-хотлинкинга на Nginx.
Используйте директиву location внутри файла конфигурации Nginx:
location ~ .(gif|png|jpe?g)$ {valid_referers none blocked linux-notes.org *.linux-notes.org;if ($invalid_referer) {return 403;}}
Первая строка показывает перечисление файлов с картинками, если у вас есть другие расширения, то добавьте чтобы защитить себя от хотлинкинга.
valid_referers — эта строка содержит список сайтов, разрешенных для hotlink изображений, ваш должен быть указан там, но если у вас есть другие сайты, то вы можете добавить их.
Вы также можете защитить файлы от определенного каталога. Например:
location /pictures/ {valid_referers none blocked linux-notes.org *.linux-notes.org;if ($invalid_referer) {return 403;}}
Кроме того, вместо отправки 403, вы можете заменить реальное изображение с пользовательской картинки на лету, используя этот код:
#Prevent hotlinkinglocation ~ .(gif|png|jpe?g)$ {expires 7d;add_header Pragma public;add_header Cache-Control "public, must-revalidate, proxy-revalidate";valid_referers none blocked .linux-notes.org;if ($invalid_referer) {rewrite (.*).(jpg|jpeg|png|gif)$ http://www.linux-notes.org/images/hotlink_block.jpg;#rewrite (.*) /static/images/hotlink_block.jpg redirect;}}
Использование кода что выше в файле конфигурации виртуального хоста вашего сайта будет заменять hotlinked изображение с вашего пользовательского изображения.
Но можно не ставить данные заглушки, т.к они могут создать нагрузку на сервере и можно обойтись кодом ошибки 403. лучше всего добавить доверенные сайты ( сайты которые попадают в «белый список hotlink»), я добавил это следующим образом:
location ~* ^.+.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf)$ {root $root_path;valid_referers none blocked server_names ~(vash-site|yandex|google|yahoo|bing|facebook|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing);if ($invalid_referer) {return 403;}error_page 404 /40x.html;location = /40x.html {root /usr/share/nginx/html/;}}
Конфигурации Анти-хотлинкинга на Apache.
Для веб сервера apache, все запрещения осуществляются через файл .htaccess. :
RewriteEngine onRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?linux-notes.org [NC]RewriteRule .(jpg|jpeg|png|gif)$ - [NC,F,L]
ВНИМАНИЕ! Сделайте изменения и пропишите ваш сайт.
Для вашего сайта будет разрешено использование Hotlink, а для все остальных будет запрещаться данными правилами.
Рассмотрим другой пример, например, вы захотели отдавать с вашего сервера определенные картинки( для примера — баннер) и разрешить вставлять их на других доменах. Так же, для всех остальных ( для тех кто хотит использовать ваши файлы с картинками), я поставлю заглушку Hotlink_ban.gif:
RewriteCond %{HTTP_REFERER} !^http://www.linux-notes.org/ [NC]RewriteCond %{REQUEST_URI} !banner.gif$ [NC]RewriteCond %{REQUEST_URI} !Hotlink_ban.gif$ [NC]RewriteRule .(jpe?g|gif|bmp|png)$ http://www.linux-notes.org/images/Hotlink_ban.gif [L]
Однако, в таком подходе имеется небольшой минус — картинки могут давать нагрузку. По этому, внесем некоторые изменения в файл ( правила):
RewriteEngine onRewriteCond %{HTTP_REFERER} !^$RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?linux-notes.org [NC]RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?google.com [NC]RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yandex.ru [NC]RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?rambler.ru [NC]RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?nigma.ru [NC]RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?bing.com[NC]RewriteCond %{HTTP_REFERER} !^http(s)?://(www.)?yahoo.com[NC]RewriteRule .(jpg|jpeg|png|gif|mp.3)$ — [NC,F,L]
Прописываем все разрешенные домены для которых не действуют правила и на них можно будет увидеть ваши картинки подгруженную по хотлинку.
Тестирование Hotlinking в Nginx/Apache
Используйте команду чтобы перезапустить nginx:
# nginx·-s·reload
Я использовал этот инструмент для проверки хотлинков:
http://www.htaccesstools.com/test-hotlink-protection/
Замечание! Всегда используйте окно в режиме инкогнито для этого теста, т.к ваши изображение могут быть уже в кэше.
Другой способ тестирования с помощью команды curl:
#·curl --referer http://www.some_domain <IMAGE_URL>
Должен показать либо перенаправление на 302 или вернуть анти-хотлинк изображение. но следующий тест, должен вернуть картинку, т.к есть для него правило ( если прописали их).
#·curl --referer http://www.google.com <IMAGE_URL>
Все сделано, теперь вы знаете, как защитить ваш сайт и каталог с изображениями от хотлинкинга. А на этом все, тема «Выключить Hotlinking для картинок в Nginx/Apache» завершена.
Was this helpful?
0 / 0