就我所见,Nginx默认支持2个日志文件: error_log (跟踪与Nginx服务器本身相关的问题)和access_log (跟踪由Nginx处理的请求)。 尽pipe可以通过log_format指令来控制access_log的格式,但是我找不到一种只将某些请求logging到一个单独文件的方法,因此我想问一下SF上的问题作为未来读者的参考:
有没有办法将某些请求logging到与access_log定义的日志文件不同的日志文件?
仅供参考,这个问题背后的原因是,我有一个规则,拒绝访问200(因为403会给他们一个提示,他们被阻止)不受欢迎的抓取工具,并从access_log过滤这些请求变得更加困难。
cjc把我放在正确的轨道上。 在if语句中使用access_log本身是不可能的(你得到一个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; } }
根据文档,您应该能够在if块中放置access_log指令:
http://wiki.nginx.org/HttpLogModule
所以,你应该能够做到这样的事情:
if ($http_user_agent ~* (crawler) ) { access_log /path/to/other/log/file ; }
access_log支持如下情况:
(access_log path [format [buffer = size [flush = time]] [if = condition]];)
access_log /var/.... if $crawler;
资源: