因为有人从我们的网站窃取了内容,所以我需要创建额外的日志文件,仅当 http_referrer 包含特定域时才记录。
目前我有这个:
if ($http_referer ~* (bad-domain.com)){
return 500;
}
但是我需要返回正常响应而不是返回 500,而是记录请求。
答案1
该access_log
指令在内部有效if
,因此您只需在那里添加一个即可。
然而,它的存在将覆盖任何出现的多于它在层次结构中,因此如果你只添加一个条目,请求将不是记录到您通常为该服务器记录的任何访问日志中。
为了解决这个问题,你可以使用二 access_log
里面的指令if
,一个重复常规访问日志,一个用于特殊访问日志(log_format
如果您愿意,也可以使用不同的日志)。
答案2
只需放访问日志里面如果,不起作用
然而访问日志只限内部如果里面地点从这个帖子中我们可以看到解决方法:
if ($http_referer ~* (bad-domain.com)){
set $bad_domain 'yes';
}
location / {
if ($bad_domain = 'yes') {
access_log logs/bad_domain.log;
return 200;
}
...
}
答案3
使用map
像这样的指令
map $http_referer $loggable_referer {
default 0;
~*bad-domain.com 1;
}
access_log /var/log/nginx/bad_domain.log combined if=$loggable_referer;