Я хочу отключить запись в файл журнала доступа Nginx для определенных запросов от пользовательских агентов http.
В основном из проверки работоспособности 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 начал распознавать сервер как ВЫКЛЮЧЕННЫЙ, даже когда он был запущен и работал. Это интересно, так как Load Balancer этого не сделал, и если бы он был, он бы отбросил узел, который мы тестировали.
Я помещаю раздел 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: карта, если, access_log