У меня есть настройка nginx для блокировки определенных рефералов, например:
if ($http_referer ~* (site_name) ) {
return 403;
}
Это работает нормально, однако я хотел бы также записать заблокированный реферер в отдельный файл.
Я пробовал добавить
access_log /path/to/server/bad_domain.log;
в операторе if; однако это не работает.
Любые идеи?
Спасибо.
Редактировать:
Я тоже пробовал это безрезультатно.
if ($http_referer ~* (site_name) ) {
set $crawler 'yes';
return 403;
}
location ~ .* {
if ($crawler = 'yes') {
access_log /path/to/server/bad_domain.log;
}
}
Изменить 2:
Пытаюсь
map $http_referer $log_referer {
domain1.com 1;
default 0;
}
server { ..
if ($http_referer = "1") {
set $log_referer 1;
}
access_log /path/to/logs/bad_domain.log if=$log_referer;
...}
Дает мне результат
nginx: [emerg] unknown log format "if=$log_referer"
Ваша вторая попытка [Редактировать 2] имеет правильный синтаксис, но я думаю, что ошибка возникает из-за того, что вы используете старую версию NGINX. 'если'в журнале доступа был представлен в NGINX 1.7, см. примечания к выпуску.
Если вы установили NGINX из репозитория Ubuntu, они поставляются с версией 1.4.x. Запустите nginx с параметром -V, чтобы узнать, какую версию вы используете.
$ nginx -V
nginx version: nginx/1.8.0
Я установил конфигурацию NGINX на следующей скрипке bash:
https://thinapps.org/fiddle/lwcorkai27030iawscqklwonderquest
Посмотри! чтобы узнать, как загрузить последнюю версию NGINX и работать с условным ведением журнала.
Согласно найденной документации nginx Вот и Вотпопробуйте использовать правило карты для сопоставления вашего http-ссылки с определенным значением, а затем войдите в конкретный файл в соответствии с этим значением. Поместите эту карту в свой http-контекст (вне контекста сервера):
map $http_referer $log_referer {
example.com 1;
default 0;
}
Это относится к вашему серверу, местоположению и т. Д .;
access_log /path/to/bad_domain.log combined if=$log_referer;
Я столкнулся с той же проблемой и решил, добавив комбинированный в access_log
access_log /path/to/logs/bad_domain.log combined if=$log_referer;