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

123
V
На сайте с 28.01.2020
Offline
25
#11
Pr00f #:
nginx не знает про другие домены на сервере. Свой текущий домен можно получить через $host

Наверно я не правильно сформулировала. Файл в котором работаю - это файл ПУ сервера(шаблон).
server {
    listen      %ip%:%proxy_ssl_port% ssl http2;
    server_name %domain_idn% %alias_idn%;

и

%domain%.error.log

То есть, судя по записям %domain_idn%, %alias_idn% и %domain%  - шаблон знает имена доменов на сервере. 

Как я это понимаю, вначале шаблон формирует правила и затем их отрабатывает Nginx (Proxy) .

V
На сайте с 28.01.2020
Offline
25
#12

Вроде разобралась, так сделать нельзя.

Тогда вопрос, как прописать через регулярку основной домен и его поддомены для следующей конструкции:

valid_referers none blocked server_names ~(*.mysite.com|...anothersites.com);

*.mysite.com - такой вариант(с маской) вызывает ошибку. Может неправильно прописала, может нужно было экранировать...

HOSTER_BOMBA
На сайте с 08.06.2020
Offline
57
#13
Vaily #:

Вроде разобралась, так сделать нельзя.

Тогда вопрос, как прописать через регулярку основной домен и его поддомены для следующей конструкции:

*.mysite.com - такой вариант(с маской) вызывает ошибку.


Попробуйте без скобок - списком

       valid_referers none blocked server_names *.my_domain.com my_domain.com *.my_domain1.com my_domain1.com;
Европейский хостинг провайдер в Эстонии - https://iphoster.net/ - дешевые KVM VPS в Польше, США, Канаде, Франции, Англии, Нидерландах, Турции и Германии от 2.95$. Дешевый shared хостинг от 1$ с панелями Cpanel, ISPManager, DirectAdmin. https://wiki.iphoster.net/ - статьи на тему хостинга и серверов. Выделенные сервера в 80 странах и 133 городах мира.
V
На сайте с 28.01.2020
Offline
25
#14
HOSTER_BOMBA #:


Попробуйте без скобок - списком

Наверно это не вариант. Взяла скобки чтобы не заморачиваться с поисковиками(доменными зонами) и их сервисами. Чтобы было просто (yandex|google)
V
На сайте с 28.01.2020
Offline
25
#15
Vaily #:
Наверно это не вариант. Взяла скобки чтобы не заморачиваться с поисковиками(доменными зонами) и их сервисами. Чтобы было просто (yandex|google)
V
На сайте с 28.01.2020
Offline
25
#16
valid_referers none blocked server_names *.mysite.com ~\.yandex\. ~\.google\.;
Так тоже не работает. Хоть и делала по документации https://nginx.org/ru/docs/http/ngx_http_referer_module.html
V
На сайте с 28.01.2020
Offline
25
#17
Всем привет!

В итоге сделала через шаблон .tpl(stpl)
в секцию:
server {
...
location ~* ^.+\.(jpeg|jpg|png|svg|webp|gif|css)$ {
добавила конфигурацию:
valid_referers none blocked server_names ~(mysite|yandex|google|...и прочие);
if ($invalid_referer) {
return 444;
}

Теперь возникла задача ограничить доступ по конкретным referer дополнительно.

Думаю сделать с помощью map.
1. В шаблоне .tpl(.stpl) в секцию server { прописать:
if ($bad_referers = 1) {
return 444;
}
2. А в конфигурационном файле nginx.conf в секцию http { прописать:
map $http_referer $bad_referers {
hostnames;
default 0;
~*(badsite1.com|badsite2.com) 1;
}


Подскажите, пожалуйста, не будет ли конфликта между правилами? Например, если referer не попадает под блокировку в map $http_referer, но при этом не проходит проверку в valid_referers. Или наоборот.

Может для моей задачи есть более элегантное решение?
Бахин
На сайте с 26.05.2017
Offline
76
#18
Vaily #:
Всем привет!

В итоге сделала через шаблон .tpl(stpl)
в секцию:
server {
...
location ~* ^.+\.(jpeg|jpg|png|svg|webp|gif|css)$ {
добавила конфигурацию:

Теперь возникла задача ограничить доступ по конкретным referer дополнительно.

Думаю сделать с помощью map.
1. В шаблоне .tpl(.stpl) в секцию server { прописать:
2. А в конфигурационном файле nginx.conf в секцию http { прописать:


Подскажите, пожалуйста, не будет ли конфликта между правилами? Например, если referer не попадает под блокировку в map $http_referer, но при этом не проходит проверку в valid_referers. Или наоборот.

Может для моей задачи есть более элегантное решение?

конфликта не будет, от хотлинка Вы правила пишите в отдельный location с расширением файлов чтобы их не тянули, а вторым правилом ограничиваете вообще доступ к серверу (сайту). hostname лишнее

map $http_referer $bad_referer {

default 0;

"~*site.ru"  1;

...

}

далее без единички

if ($bad_referer) { return 444; }

P.S. map-ы лучше в отдельный файл записывать в папке conf.d

Думай о будущем, но не забывай, что этот день может стать последним!
Vladimir
На сайте с 07.06.2004
Offline
615
#19
Vaily #:
Всем привет!

В итоге сделала через шаблон .tpl(stpl)

Зря вы это затеяли:)
Это раньше была проблема, когда хостинг ограничивал трафик, на данный момент этого нет.
Скажем так, на данный момент, чем больше ваших изображений показывается на сторонних ресурсах, тем лучше для вас.

Аэройога ( https://vk.com/aeroyogadom ) Йога в гамаках ( https://vk.com/aero_yoga ) Аэройога обучение ( https://aeroyoga.ru ) и просто фото ( https://weandworld.com )
Бахин
На сайте с 26.05.2017
Offline
76
#20
Vladimir #:

Зря вы это затеяли:)
Это раньше была проблема, когда хостинг ограничивал трафик, на данный момент этого нет.
Скажем так, на данный момент, чем больше ваших изображений показывается на сторонних ресурсах, тем лучше для вас.

я думаю у человека другая цель, не снизить нагрузку, а предотвратить кражу контента, она же написала не только картинки но и стили, в общем дармоедов кормить не хочет 😁

123

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