Как исключить запись пользователей с юзер-агентом "yandex" из логов Nginx?

Как можно дополнить фильтрацию статуса 444 в nginx.conf, чтобы также учитывалось значение $http_user_agent при помощи map и условия access_log?
  • 13 апреля 2024 г. 11:59
Ответы на вопрос 2
Для исключения записей пользователей с юзер-агентом "yandex" из логов Nginx, можно использовать директиву `if` в файле конфигурации сервера. Например:

```
server {
    # other server configurations
    
    if ($http_user_agent ~* "yandex") {
        return 444;
    }
}
```

Чтобы дополнить фильтрацию статуса 444 в nginx.conf и учитывать значение $http_user_agent при помощи map и условия access_log, можно сделать следующее:

1. Создать карту (map) для определения, является ли значение $http_user_agent равным "yandex":

```
map $http_user_agent $is_yandex {
    default 0;
    ~*yandex 1;
}
```

2. Добавить условие в блоке `server` для проверки значения $is_yandex и статуса 444:

```
server {
    # other server configurations
    
    if ($is_yandex) {
        return 444;
    }

    access_log /var/log/nginx/access.log combined if=$status = 444;
}
```

Таким образом, все запросы с юзер-агентом "yandex" будут обработаны статусом 444 и не будут записываться в лог файл.
map $status:$http_user_agent  $loggable {
    ~^444:                    0;
    ~^[^:]+:.*Yandex.*        0;
    default                   1;
}
Похожие вопросы