我正在closures来自http用户代理的特定请求的日志logging在Nginx的访问日志文件。
基本上来自亚马逊ELB健康检查和我们的外部(Pingdom)监测。 由于这些来自每隔几秒钟,使testing难以sorting通过日志。
"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/)"
我能够阻止图像文件的日志logging,但没有看到任何传入的请求:
location ~* ^.+.(jpg|jpeg|gif|css|png|js|ico|xml|svg)$ { access_log off; expires 30d; }
提前致谢!
所以我尝试了@Gnarfoz的build议,但是有一些有趣的副作用。 虽然这两个“健康检查”没有logging,Pingdom开始认识到服务器即使在启动和运行。 这很有趣,因为Load Balancer没有这样做,如果有的话,它会丢弃我们正在testing的节点。
我把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"
尝试这个:
# map goes *outside* of the "server" block map $http_user_agent $ignore_ua { default 0; "~Pingdom.*" 1; "ELB-HealthChecker/1.0" 1; } server { # Things omitted for brevity location / { if ($ignore_ua) { access_log off; return 200; } } }
if部分可能需要集成到您的相应位置块中。
相关的nginx文档: map , if , access_log