我希望关闭来自 http 用户代理的特定请求在 Nginx 访问日志文件中的记录。
基本上来自 Amazon ELB 健康检查和我们的外部 (Pingdom) 监控。由于这些每隔几秒钟就会出现一次,因此测试很难对日志进行分类。
"GET / HTTP/1.1" 200 727 "-" "ELB-HealthChecker/1.0"
"GET /login HTTP/1.1" 200 7492 "-" "Pingdom.com_bot_version_1.4_(http://www.pingdom.com/)"
我能够阻止图像文件的日志记录,但没有看到任何传入请求:
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|svg)$ {
access_log off;
expires 30d;
}
提前致谢!
因此我尝试了 @Gnarfoz 的建议,但出现了一些有趣的副作用。虽然没有记录这两次“健康检查”,但 Pingdom 开始将服务器识别为 DOWN,即使服务器正在运行。这很有趣,因为负载均衡器没有这样做,如果这样做,它会丢弃我们正在测试的节点。
我将 MAP 部分放在日志下方的 HTML 块中:
access_log /www/access.log;
error_log /www/error.log;
map $http_user_agent $ignore_ua {
default 0;
"~Pingdom.*" 1;
"ELB-HealthChecker/1.0" 1;
}
我将 IF 语句放在我的服务器块中,使用默认位置:
location / {
try_files $uri $uri/ /index.php?$args;
if ($ignore_ua) {
access_log off;
}
}
当我执行此操作时,Pingdom 开始在错误日志文件中生成 404 错误:
2012/08/03 17:10:33 [error] 6250#0: *164 open() "/www/public_html/login" failed (2: No such file or directory), client: 10.xx.xx.xx, server: xxx.com, request: "GET /login HTTP/1.1", host: "xxx.com"
2012/08/03 17:11:32 [error] 6250#0: *240 open() "/www/public_html/login" failed (2: No such file or directory), client: 10.xx.xx.xx, server: xxx.com, request: "GET /login HTTP/1.1", host: "xxx.com"