据我所知,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
错误)。所以解决方法如下:access_log 支持如果:
(access_log 路径 [格式 [buffer=size [flush=time]] [if=condition]];)
access_log /var/.... if $crawler;
资源:
http://nginx.org/en/docs/http/ngx_http_log_module.html
根据文档,您应该能够将
access_log
指令放入块中:if
http://wiki.nginx.org/HttpLogModule
因此,您应该能够执行以下操作:
当我看到这篇文章时,我正在寻找一种方法来将 AWS ELB 健康检查日志发送到一个单独的文件,因为它们正在堵塞
access.log
。我从来没有能够在一个块内access_log
工作,这也不起作用:if
location
在大括号的海洋中,很容易忘记 NGINX 配置文件不是一种编程语言。
我最终得到的,虽然看起来很笨重,是这样的:
常规流量转到
access.log
ELB 健康检查日志转到elb-healthcheck.log
.