Я решил поставить на своем сайте веб-сервер Nginx и, конечно же, мне стало интересно, сколько уникальных посетителей приходит на мой сайт каждый день. Я знал, что Nginx может сохранять журналы доступа, но как точно получить статистику уникальных посетителей?Я начал искать в стандартных утилитах Nginx информацию о посетителях и узнал, что Nginx записывает информацию о каждом запросе в журнал доступа. Журнал доступа ー это просто текстовый файл, в котором содержится информация о каждом запросе к серверу, включая IP-адрес клиента и запрашиваемые ресурсы.Для анализа журналов доступа я решил использовать стандартную утилиту `grep`, которая позволяет искать и фильтровать строки в текстовых файлах. В моем случае, я хотел найти все уникальные IP-адреса клиентов, поэтому я использовал следующую команду⁚
grep -oE ″\b([0-9]{1,3}\.){3}[0-9]{1,3}\b″ access.log | sort | uniq
Объясню, как работает эта команда. `grep -oE ″\b([0-9]{1,3}\.){3}[0-9]{1,3}\b″` ищет в файле `access.log` все вхождения IP-адресов в формате xxx.xxx.xxx.xxx. Затем `sort` сортирует найденные IP-адреса, а `uniq` удаляет все дубликаты, оставляя только уникальные.После выполнения этой команды у меня появился список всех уникальных IP-адресов, с которых происходили запросы к моему серверу. К разочарованию, я понял, что это не то, что я искал. Мне нужно было узнать количество уникальных посетителей, а не только их IP-адреса.
Однако, я не унывал и продолжил искать возможность получить более подробную информацию о посетителях. На этот раз я обратил внимание на утилиту `awk`, которая позволяет обрабатывать и анализировать структурированные данные. Я изменил команду следующим образом⁚
awk ‘{print $1}’ access.log | sort | uniq | wc -l
В этой команде `awk ‘{print $1}’` извлекает только первый столбец из файла `access.log`, который содержит IP-адреса клиентов. Затем `sort` и `uniq` удаляют все дубликаты, и в конце `wc -l` подсчитывает количество строк в выводе.
На этот раз я получил именно то, что искал ー общее количество уникальных посетителей моего сайта за определенный период времени.