Защита от hotlink через nginx

12 3
V
На сайте с 28.01.2020
Offline
25
1365
Здравствуйте!

Необходимо защититься от хотлинков. В данном вопросе я не компетентна. На просторах интернета нашла оптимальный, на мой взгляд, вариант:
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|subscribe|feedburner|mail|rambler|nigma|ask|qip|bing);
if ($invalid_referer) {
return 403;
}
error_page 404 = @fallback;
}

Из кода понимаю следущее:

- можно добавлять/удалять расширения файлов в список(например, webp).

- можно добавлять/удалять разрешенные(валидные) refere. Не возникнет проблем с поисковиками и их сервисами.

Что непонятно:
1.  Некоторые расширения содержат "?". Коректный вариант будет "mpe?g" или "mpeg"

2.  Для чего нужна строка error_page 404 = @fallback;


Буду признательна, если поможете разобраться или предложите своё более корректное решение защиты через nginx. 
Отвечу с удовольствием, если от меня потребуются какие-либо уточнения.



K6
На сайте с 28.02.2022
Offline
95
#1

а у Вас фотохостинг или сайт обычный - если просто сайт, то jpg|jpeg|gif|png лучше не прописывать - на картинки тоже многие ссылаются, все таки траст для сайт в ПС в Гугл.

дешевые VIP VPS: https://clck.ru/324vy9
P0
На сайте с 17.06.2010
Offline
94
#2

Знак "?" означает, что символ перед ним опциональный - может быть, может и не быть. В случае "mpe?g" значит, что будут проходить 2 варианта - "mpg" и "mpeg".

@fallback - именованный блок location {}, который вызывается при ошибке.

У nginx есть хорошая документация на русском - https://nginx.org/ru/docs/http/ngx_http_core_module.html#error_page

https://kinobox.tv/ - бесплатный плеер с фильмами для киносайта.
V
На сайте с 28.01.2020
Offline
25
#3
katz666 #:

а у Вас фотохостинг или сайт обычный - если просто сайт, то jpg|jpeg|gif|png лучше не прописывать - на картинки тоже многие ссылаются, все таки траст для сайт в ПС в Гугл.

Обычный сайт.
Дело в том, что есть сайты которые подключаются к моим стилевым файлам (css) и изображениям. Хочется ограничить таким сайтам эту возможность.
V
На сайте с 28.01.2020
Offline
25
#4
А может лучше так, вместо исключений из правила ограничения 
valid_referers none blocked server_names ~(vash-site|yandex|google|...)

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

Поделитесь опытом из своей практики, как лучше организовать защиту.

M
На сайте с 17.09.2016
Offline
130
#5
Vaily #:
А может лучше так, вместо исключений из правила ограничения 

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

Поделитесь опытом из своей практики, как лучше организовать защиту.

Белый список гораздо проще составить

Любителей стырить контент задолбаетесь банить, вместо забаненых будут приходить другие

V
На сайте с 28.01.2020
Offline
25
#6
Mobiaaa #:

Белый список гораздо проще составить

Любителей стырить контент задолбаетесь банить, вместо забаненых будут приходить другие

Тоже так считаю.  Спасибо за совет!
Andron_buton
На сайте с 19.07.2007
Offline
270
#7
Vaily :

Что непонятно:
1.  Некоторые расширения содержат "?". Коректный вариант будет "mpe?g" или "mpeg"

2.  Для чего нужна строка error_page 404 = @fallback;

1. Должно быть mp?g, что как бы обїединяет 2 в одном mpg и mpeg. Совственно знак вопроса в RegEx  - это один любой сомвол или отсутсвие симловала.

2. Можно создать location @fallback; в который будут попадать запросы с кодом 404, и выдавать вместо 404 not found красивую страницу 404.html  Тут вот примеры

P0
На сайте с 17.06.2010
Offline
94
#8
Andron_buton #:

1. Должно быть mp?g, что как бы обїединяет 2 в одном mpg и mpeg. Совственно знак вопроса в RegEx  - это один любой сомвол или отсутсвие симловала.

Нет, не должно быть. Такое правило не будет находить "mpeg". Изначально правило было указано правильно. 

https://i.ibb.co/ZgtvfHf/111.png

V
На сайте с 28.01.2020
Offline
25
#9
Строка
valid_referers none blocked server_names ~(mysite1.ru|mysite2.ru|anothersite.ru|... 
где mysite1.ru|mysite2.ru - это мои домены на сервере

Есть ли переменная отвечающая за имена доменов на сервере. Чтобы каждый раз не вписывать вручную свой новый домен.
например так
valid_referers none blocked server_names ~($MySitesOnServer|anothersite.ru|...

P0
На сайте с 17.06.2010
Offline
94
#10
Vaily #:
Есть ли переменная отвечающая за имена доменов на сервере. Чтобы каждый раз не вписывать вручную свой новый домен.
nginx не знает про другие домены на сервере. Свой текущий домен можно получить через $host
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий