Назад | Перейти на главную страницу

Журналы доступа nginx игнорируют определенные запросы

Я запускаю 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. Используйте переменную карты в имени оператора журнала доступа

В противном случае у вас есть исходный код, так что взламывайте то, что вам нужно.