我已经设置了 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"
答案1
答案2
第二次尝试[编辑2] 的语法正确,但我认为错误是由于您使用的是旧版本的 NGINX。'如果' 在 NGINX 1.7 中引入了访问日志,请参阅发行说明。
如果你从 Ubuntu repo 安装了 NGINX,那么他们提供的是 1.4.x 版本。使用 -V 运行 nginx 可以知道你正在运行的是哪个版本。
$ nginx -V
nginx version: nginx/1.8.0
我已经在以下 bash fiddle 中设置了 NGINX 配置:
https://thinapps.org/fiddle/lwcorkai27030iawscqklwonderquest
看一看!了解如何获取最新版本的 NGINX 并使用条件日志记录。
答案3
我遇到了同样的问题并通过添加解决了合并到 access_log
access_log /path/to/logs/bad_domain.log combined if=$log_referer;