存在特定引荐来源时的 nginx 日志

存在特定引荐来源时的 nginx 日志

因为有人从我们的网站窃取了内容,所以我需要创建额外的日志文件,仅当 http_referrer 包含特定域时才记录。

目前我有这个:

   if ($http_referer ~* (bad-domain.com)){
           return  500;
   }

但是我需要返回正常响应而不是返回 500,而是记录请求。

答案1

access_log指令在内部有效if,因此您只需在那里添加一个即可。

然而,它的存在将覆盖任何出现的多于它在层次结构中,因此如果你只添加一个条目,请求将不是记录到您通常为该服务器记录的任何访问日志中。

为了解决这个问题,你可以使用 access_log里面的指令if,一个重复常规访问日志,一个用于特殊访问日志(log_format如果您愿意,也可以使用不同的日志)。

答案2

只需放访问日志里面如果,不起作用

然而访问日志只限内部如果里面地点从这个帖子中我们可以看到解决方法:

仅为特定请求创建单独的 Nginx 访问日志文件

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;

相关内容