Поскольку кто-то крадет контент с нашего веб-сайта, мне нужно создать дополнительный файл журнала, который будет регистрироваться только в том случае, если http_referrer содержит определенный домен.
В настоящее время у меня есть это:
if ($http_referer ~* (bad-domain.com)){
return 500;
}
Но вместо возврата 500 мне нужно вернуть нормальный ответ, но для регистрации запроса.
В access_log
директива действительна внутри if
, так что вы можете просто добавить туда один.
тем не мение, его присутствие отменяет любые появляющиеся выше он находится в иерархии, поэтому, если вы просто добавите одну запись, запрос будет не записываться в любой журнал доступа, который вы обычно ведете для этого сервера.
Чтобы обойти это, вы можете использовать два access_log
директивы внутри if
, один из которых повторяет обычный журнал доступа, а другой - для вашего специального журнала доступа (который также может использовать другой log_format
если хотите).
Просто кладу access_log внутри если, не работает
тем не мение access_log только внутри если внутри расположение и из этой ветки мы можем увидеть обходной путь:
Отдельный файл журнала доступа Nginx только для определенных запросов
if ($http_referer ~* (bad-domain.com)){
set $bad_domain 'yes';
}
location / {
if ($bad_domain = 'yes') {
access_log logs/bad_domain.log;
return 200;
}
...
}
Использовать map
директива вроде этой
map $http_referer $loggable_referer {
default 0;
~*bad-domain.com 1;
}
access_log /var/log/nginx/bad_domain.log combined if=$loggable_referer;