Nginx Kāohi i ka loulou ʻana me ka ʻokoʻa

Ke hoʻāʻo nei wau e hoʻokō i ka pale hoʻoili hotlinking.

Ua loaʻa iaʻu kēia code

    location /download/ {
      valid_referers  blocked  server_names  *.example.com;

      if ($invalid_referer) {
        return   403;
      }

Ke hana maikaʻi nei, ʻae kēia e kuhikuhi i ka domain a ālai i nā mea āpau ʻole i nā valid_referers, He aha ka pilikia? makemake wau e hoʻokō i kahi kikoʻī IP i ʻae ʻia e hoʻohana ʻole i ka referer a hoʻomaha iā ia.

ʻO kēia ka mea e hōʻike ai i ka log.

1.2.3.4 - - - "GET file.doc HTTP / 2.0" 200 13050 "-" " - "

Makemake au i 1.2.3.4 wale nō e ʻae i kekahi mea ʻole.

0
задан 11 June 2020 в 08:35
1 ответ

Для предотвращения хотлинкинга достаточно разрешить пустые строки реферера (прямая загрузка). Поэтому ваша конфигурация может выглядеть так:

valid_referers none blocked server_names *.example.com;

Браузеры всегда добавляют заголовок Referer к запросам изображений, когда они загружают изображения, встроенные в веб-страницы.

Если вы действительно хотите заблокировать прямую загрузку изображений, вам нужно использовать что-то вроде этого на уровне http конфигурации nginx:

geo $blocked {
    default 1;
    1.2.3.4 0;
}

А затем в server заблокировать :

location /download/ {
    valid_referers  blocked  server_names  *.example.com;

    set $refblocked $invalid_referer$blocked;

    if ($refblocked = "11") { # If value of both $invalid_referer and $blocked are 1, block access.
        return 403;
    }
}

Здесь модуль geo используется для сопоставления IP-адреса со значением переменной, а set используется для объединения $invalid_referer и . $blocked в одну переменную, которая проверяется в операторе if.

Я сам не проверял именно эту конфигурацию, но принцип должен работать.

0
ответ дан 11 June 2020 в 05:34

Теги

Похожие вопросы