Я запускаю nginx за haproxy (работает на том же сервере). Я настроил haproxy на использование простого html-файла на nginx для проверки работы службы, так как у меня нет / мне нужен действительный URL-адрес "/" на этом хосте. Nginx не поддерживает тип запроса OPTIONS (насколько мне известно), который используется haproxy по умолчанию, поэтому я изменил его на GET.
Поскольку у меня в nginx включены журналы доступа, я получаю все эти запросы на опрос в моем журнале доступа. Есть ли способ настроить nginx для игнорирования определенных запросов и пропуска их регистрации?
Вот бэкэнд haproxy:
backend static_http
option httpchk GET /test.html
option redispatch
balance roundrobin
#fullconn 1000
server w1_static www1:81 check port 81 inter 2000
И вот что я вижу в журналах nginx:
127.0.0.1 - - [24/Jul/2009:19:28:22 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:24 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:26 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:28 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
127.0.0.1 - - [24/Jul/2009:19:28:30 +0000] "GET /test.html HTTP/1.0" 200 12 "-" "-"
Теперь ты можешь это сделать
http://nginx.org/en/docs/http/ngx_http_log_module.html
Параметр if (1.7.0) включает условное ведение журнала. Запрос не будет зарегистрирован, если условие оценивается как «0» или пустая строка.
map $request_uri $loggable {
/ 0;
/healthcheck.html 0;
default 1;
}
server {
...
access_log /var/log/nginx/access.log combined if=$loggable;
}
Что ж, вы можете попробовать создать для этого конкретную директиву местоположения.
Что-то вроде
location /test.html {
access_log off;
}
должно работать (непроверено) ...
Нет встроенной фильтрации, которая сделает то, что вы хотите.
Однако есть несколько приемов, которые вы можете попробовать. Все это приведет к тому, что данные, которые вас не интересуют, будут записаны в другой файл, который вы можете использовать извне (вспомните о HUP nginx впоследствии) так часто, как вы считаете нужным.
если haproxy - единственное, что запрашивает /test.html, у вас может быть другой журнал доступа для каждого блока местоположения (к сожалению, не для блока if внутри блока местоположения).
если другие узлы запрашивают /test.html, но все запросы от 127.0.0.1 являются haproxy, вы можете создать карту на основе $ remote_addr, которая переводит 127.0.0.1 в access_log.junk и все остальное в access_log. Используйте переменную карты в имени оператора журнала доступа
В противном случае у вас есть исходный код, так что взламывайте то, что вам нужно.