仅针对某些请求单独的 Nginx 访问日志文件

Max*_*Max 7 ubuntu nginx logging blocking request

据我所知,Nginx 默认支持 2 个日志文件:(error_log跟踪与 Nginx 服务器本身相关的问题)和access_log(跟踪 Nginx 处理的请求)。虽然可以access_log使用log_format指令控制 的格式,但我一直未能找到一种仅将某些请求记录到单独文件的方法,因此想在 SF 上提出问题作为未来读者的参考:

有没有办法将某些请求记录到与 定义的不同的日志文件中access_log

仅供参考,这个问题背后的原因是我有一个规则,拒绝访问带有 200 的不需要的爬虫(因为 403 会提示他们被阻止),并且从 中过滤这些请求access_log变得更加困难。

Max*_*Max 8

cjc让我走上正轨。使用access_logif本身的语句是不可能的(你得到一个nginx: [emerg] "access_log" directive is not allowed here错误)。所以解决方法如下:

if ($http_user_agent ~* (crawler) ) {
  set $crawler 'yes';
}
location ~ .* {
  if ($crawler = 'yes') {
    access_log /var/log/nginx/blockedbots.log;
    return 200;
    }
}
Run Code Online (Sandbox Code Playgroud)


Tho*_*aux 6

access_log 支持以下情况:

(访问日志路径[格式[缓冲区=大小[刷新=时间]] [如果=条件]];)

access_log /var/.... if $crawler;

来源:

http://nginx.org/en/docs/http/ngx_http_log_module.html