我有我的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"
最佳答案
根据发现here和here的nginx文档,尝试使用map规则将您的http引用映射到某个值,然后根据该值登录到特定文件.将此映射放在http上下文中(服务器上下文之外):
map $http_referer $log_referer {
example.com 1;
default 0;
}
这将转到您的服务器,位置等;
access_log /path/to/bad_domain.log combined if=$log_referer;