Когда у тебя один сайт за ним вполне удобно следить. Можно почитать логи веб-сервера, можно поставить Awstats и написать конфиг по примеру.
Со временем, когда у тебя появляется много сайтов, приходится генерить конфиги Awstats автоматически при добавлении сайтов. Довольно нетрудно придумать схему: главные юзеры (из htpasswd могут читать все статистики, а если надо отдельно для конкретного сайта легко в нужный конфиг дописывать нужного юзера. Это когда на сервере хостятся сайты от заказчиков.
Недавно столкнулся с проблемой: у заказчика 8 сайтов, и ему не нравится иметь 8 логинов и паролей. Выдать ему главного пользователя? Тогда он сможет читать статистики других сайтов, возможно даже своих конкурентов. Это неприемлемо. Можно вывести его из системы и править руками данные конфиги. Но ведь могут появится ещё 8 клиентов с такими же проблемами. Тогда уж точно система генерирования конфигов будет не нужна.
Что же тут, можно сделать? Из математики мы знаем, что есть функции, которые отображают многие объекты в одно значение. Например, для f(x)=|x| верно f(2)=f(-2). Иначе говорят, что f(x) сюръективно. Такие функции очень сложно обратить. И возникают различные абстрактные вещи вроде многолистных функций или отношений. А ведь у нас именно такая ситуация: нескольким сайтам должен соответствовать один владелец — пользователь, имеющий права читать статистику всех этих сайтов.
Для того, чтобы решить такую задачу мы введем дополнительную структуру: табличку, в которой будет сказано какой пользователь имеет какой доступ, вроде такой:
ruut | * |
ex | example.com,example.net |
В данной ситуации ruut может читать статистику всех сайтов, которые обрабатывает Awstats, а ex — только сайты example.com и example.net.
Хранить предлагаю, например в /opt/awstatstab.
Привожу пример решения на github