Выборочная защита от хотлинка в nginx
AllStory
nginx-forum на nginx.us
Вт Мар 1 13:36:54 MSK 2011
Добрый день ,заранее извиняюсь если был
такой вопрос, не ответа не нашел ни в
гугле, ни здесь. Можно ли сделать защиту
от хотлинка для файлов всего сайта, за
исключением файлов размещенных в одной
конкретной директории этого же сайта? В
теории я полагаю, что можно, а как в
действительности сделать это и главное
правильно сделать. Мои мысли таковы, на
примере стандартной защиты:
location ~* ^.+\.(jpg|jpeg|gif|png)$ {
root /path/to/root;
valid_referers none blocked server_names ~\.server1\.
~\.server2\.;
if ($invalid_referer) {
rewrite ^ /badreferer.png last;
}
}
location /badreferer.png {
root /path/to/badreferer;
}
Где все файлы с расширениями
указанными в location будут заменяться
заглушкой. Это условие действует для
всех таких файлов на всем сайте. Это
понятно.
Теперь допустим, что мне нужно защитить
эти файлы от хотлинка на всем сайте, Но
у меня есть кнопки моего сайта, которые
размещены на многих других сайтах.
Соответственно, если применить только
вышеуказанное условие, все размещенные
на других сайтах кнопки на мой сайт
будут выдавать также заглушку. Самое
очевидное (и банальное) решение - убрать
из location расширение для изображений
кнопок. Но есть две серьезные проблемы.
Во-первых, под свободный хотлинк
попадут не только кнопки, но и все
остальные файл с таким же расширением,
что уже плохо. И во-вторых, файлы кнопок
ведь не все одного типа, а значит из
защиты от хотлинка исключаются
множество файлов различных типов, что
вообще полностью убивает весь смысл
такой защиты. Значит, необходимо
использовать дополнительное условие,
которые бы защищало все указанные в
location файлы со всего сайта, за
исключением например одной конкретной
дирректории. То есть, на примере это
где-то должно выглядеть так:
// Защищаем все файлы сайта с указанными
расширениями от хотлинкинга с
заглушкой
location ~* ^.+\.(jpg|jpeg|gif|png)$ {
root /path/to/root;
valid_referers none blocked server_names ~\.server1\.
~\.server2\.;
if ($invalid_referer) {
rewrite ^ /badreferer.png last;
}
}
location /badreferer.png {
root /path/to/badreferer;
}
// Здесь же, разрешаем использовать
прямые ссылки на файлы моего сайта
(например кнопки сайта), размещенные в
указанной директории моего сайта, в
данном случае в папке buttons
location ~* ^.+\.(jpg|jpeg|gif|png)$ {
root /path/to/root/buttons;
}
Теперь вопрос. Будет ли работать такая
конфигурация, на общую защиту от
хотлинкинга, с исключением для папки
buttons. И верен ли такой синтаксис. Прошу
подсказать, подправить и помочь ))
Posted at Nginx Forum: http://forum.nginx.org/read.php?21,179409,179409#msg-179409
Подробная информация о списке рассылки nginx-ru