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变得更加困难。
cjc让我走上正轨。使用access_log在if本身的语句是不可能的(你得到一个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)
access_log 支持以下情况:
(访问日志路径[格式[缓冲区=大小[刷新=时间]] [如果=条件]];)
access_log /var/.... if $crawler;
来源:
http://nginx.org/en/docs/http/ngx_http_log_module.html