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.
Для предотвращения хотлинкинга достаточно разрешить пустые строки реферера (прямая загрузка). Поэтому ваша конфигурация может выглядеть так:
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
.
Я сам не проверял именно эту конфигурацию, но принцип должен работать.