Возникла необходимость собирать статистику посещений одного из django-проектиков. Так как когда-то, давным-давно, имел кое-какой опыт работы с awstats, его же и решил прикрутить. Ранее, правда, работал с apache2, а тут nginx. Можно, конечно, поставить apache2, чтоб слушал какой-нибудь 8080-порт, или типа того. Но зачем?
Порывшись в интернетах нашел несколько гайдов по прикручиванию, но ни один не подошел/не заработал в силу разных причин. Потому приведу здесь компиляцию всего найденого.
Подразумевая что nginx уже поставлен и настроен, доставляем недостающие для решения задачи пакеты:
sudo pacman -S awstats fcgiwrap spawn-cgi
awstats положит все ему необходимое в /usr/share/webapps/awstats (за другие дистрибутивы не ручаюсь). Копию всего этого добра, с которой будем работать, ложим в /srv/http/awstats, чтобы получилась такая структура:
tree -d /srv/http/awstats
/srv/http/awstats/ ├── cgi-bin │ ├── lang │ │ ├── tooltips_f │ │ ├── tooltips_m │ │ └── tooltips_w │ ├── lib │ └── plugins │ └── example ├── classes │ └── src ├── css ├── icon │ ├── browser │ ├── clock │ ├── cpu │ ├── flags │ ├── mime │ ├── os │ └── other └── js
Ставим права:
chown -R http:http /srv/http/awstats
Далее правим конфиг vhost’а, для которого прикручиваем awstats (конечно, можно и в отдельный vhost вынести, но я не стал):
server { ... # тут основная часть конфига vhost'а ... location /awstats { auth_basic "Restricted"; auth_basic_user_file /etc/nginx/auth/htpasswd; root /srv/http/awstats/cgi-bin; fastcgi_pass unix:/var/run/fcgiwrap.sock; fastcgi_index index.php; fastcgi_param SCRIPT_NAME /awstats.pl; fastcgi_param QUERY_STRING $query_string; fastcgi_param REQUEST_METHOD $request_method; fastcgi_param CONTENT_TYPE $content_type; fastcgi_param CONTENT_LENGTH $content_length; include fastcgi_params; } location /awstatsclasses/ { alias /srv/http/awstats/classes/; } location /awstatscss/ { alias /srv/http/awstats/css/; } location /icon/ { alias /srv/http/awstats/icon/; } }
Создаем пользователя, которому разрешено смотреть статистику (ограничивать по IP неохота, т. к. с разных мест нужно будет смотреть):
htpasswd -cmb /etc/nginx/auth/htpasswd имя_пользователя пароль
Клепаем конфиг awstats (/etc/awstats/awstats.доменное_имя_сайта.conf):
LogFile="/var/log/nginx/access.log" LogType=W LogFormat=1 LogSeparator=" " SiteDomain="доменное_имя_сайта" HostAliases="localhost 127.0.0.1" DNSLookup=1 DirData="/srv/http/awstats" DirCgi="/cgi-bin" DirIcons="/icon" AllowToUpdateStatsFromBrowser=1 AllowFullYearView=2 EnableLockForUpdate=1 DNSStaticCacheFile="dnscache.txt" DNSLastUpdateCacheFile="dnscachelastupdate.txt" SkipDNSLookupFor="" AllowAccessFromWebToAuthenticatedUsersOnly=0 AllowAccessFromWebToFollowingAuthenticatedUsers="" AllowAccessFromWebToFollowingIPAddresses="" CreateDirDataIfNotExists=1 BuildHistoryFormat=text BuildReportFormat=html SaveDatabaseFilesWithPermissionsForEveryone=0 PurgeLogFile=0 ArchiveLogRecords=0 KeepBackupOfHistoricFiles=0 DefaultFile="index.php index.html" SkipHosts="" SkipUserAgents="" SkipFiles="" SkipReferrersBlackList="" OnlyHosts="" OnlyUserAgents="" OnlyUsers="" OnlyFiles="" NotPageList="css js class gif jpg jpeg png bmp ico rss xml swf" ValidHTTPCodes="200 304" ValidSMTPCodes="1 250" AuthenticatedUsersNotCaseSensitive=0 URLNotCaseSensitive=0 URLWithAnchor=0 URLQuerySeparators="?;" URLWithQuery=0 URLWithQueryWithOnlyFollowingParameters="" URLWithQueryWithoutFollowingParameters="" URLReferrerWithQuery=0 WarningMessages=1 ErrorMessages="" DebugMessages=0 NbOfLinesForCorruptedLog=50 WrapperScript="" DecodeUA=0 MiscTrackerUrl="/js/awstats_misc_tracker.js" LevelForBrowsersDetection=2 LevelForOSDetection=2 LevelForRefererAnalyze=2 LevelForRobotsDetection=2 LevelForSearchEnginesDetection=2 LevelForKeywordsDetection=2 LevelForFileTypesDetection=2 LevelForWormsDetection=0 UseFramesWhenCGI=1 DetailedReportsOnNewWindows=1 Expires=0 MaxRowsInHTMLOutput=1000 Lang="auto" DirLang="/srv/http/awstats/lang" ShowMenu=1 ShowSummary=UVPHB ShowMonthStats=UVPHB ShowDaysOfMonthStats=VPHB ShowDaysOfWeekStats=PHB ShowHoursStats=PHB ShowDomainsStats=PHB ShowHostsStats=PHBL ShowAuthenticatedUsers=0 ShowRobotsStats=HBL ShowWormsStats=0 ShowEMailSenders=0 ShowEMailReceivers=0 ShowSessionsStats=1 ShowPagesStats=PBEX ShowFileTypesStats=HB ShowFileSizesStats=0 ShowDownloadsStats=HB ShowOSStats=1 ShowBrowsersStats=1 ShowScreenSizeStats=0 ShowOriginStats=PH ShowKeyphrasesStats=1 ShowKeywordsStats=1 ShowMiscStats=a ShowHTTPErrorsStats=1 ShowSMTPErrorsStats=0 ShowClusterStats=0 AddDataArrayMonthStats=1 AddDataArrayShowDaysOfMonthStats=1 AddDataArrayShowDaysOfWeekStats=1 AddDataArrayShowHoursStats=1 IncludeInternalLinksInOriginSection=0 MaxNbOfDomain = 10 MinHitDomain = 1 MaxNbOfHostsShown = 10 MinHitHost = 1 MaxNbOfLoginShown = 10 MinHitLogin = 1 MaxNbOfRobotShown = 10 MinHitRobot = 1 MaxNbOfDownloadsShown = 10 MinHitDownloads = 1 MaxNbOfPageShown = 10 MinHitFile = 1 MaxNbOfOsShown = 10 MinHitOs = 1 MaxNbOfBrowsersShown = 10 MinHitBrowser = 1 MaxNbOfScreenSizesShown = 5 MinHitScreenSize = 1 MaxNbOfWindowSizesShown = 5 MinHitWindowSize = 1 MaxNbOfRefererShown = 10 MinHitRefer = 1 MaxNbOfKeyphrasesShown = 10 MinHitKeyphrase = 1 MaxNbOfKeywordsShown = 10 MinHitKeyword = 1 MaxNbOfEMailsShown = 20 MinHitEMail = 1 FirstDayOfWeek=1 ShowFlagLinks="" ShowLinksOnUrl=1 UseHTTPSLinkForUrl="" MaxLengthOfShownURL=64 HTMLHeadSection="" HTMLEndSection="" MetaRobot=0 Logo="awstats_logo6.png" LogoLink="http://www.awstats.org" BarWidth = 260 BarHeight = 90 StyleSheet="" color_Background="FFFFFF" color_TableBGTitle="CCCCDD" color_TableTitle="000000" color_TableBG="CCCCDD" color_TableRowTitle="FFFFFF" color_TableBGRowTitle="ECECEC" color_TableBorder="ECECEC" color_text="000000" color_textpercent="606060" color_titletext="000000" color_weekend="EAEAEA" color_link="0011BB" color_hover="605040" color_u="FFAA66" color_v="F4F090" color_p="4477DD" color_h="66DDEE" color_k="2EA495" color_s="8888DD" color_e="CEC2E8" color_x="C1B2E2" LoadPlugin="hashfiles" ExtraTrackedRowsLimit=500
Далее запускаем первоначальное накопление капитала данных для статистики:
/usr/share/webapps/awstats/cgi-bin/awstats.pl -config=доменное_имя_сайта -update
Создаем systemd-таймер, чтоб раз в n-минут (у меня 10) awstats обновлял данные:
sudo nano /etc/systemd/system/awstats-доменное_имя_сайта.service
[Unit] Description=awstats for доменное_имя_сайта [Service] Type=simple ExecStart=/usr/share/webapps/awstats/cgi-bin/awstats.pl -config=доменное_имя_сайта -update > /dev/null User=root Group=users
sudo nano /etc/systemd/system/awstats-доменное_имя_сайта.timer
[Unit] Description=awstats for доменное_имя_сайта [Timer] OnBootSec=10min OnUnitActiveSec=10min [Install] WantedBy=timers.target
Врубаем таймер:
sudo systemctl enable awstats-доменное_имя_сайта.timer sudo systemctl start awstats-доменное_имя_сайта.timer
Врубаем fcgiwrap:
sudo systemctl enable fcgiwrap.socket sudo systemctl start fcgiwrap.socket
Перезапускаем nginx:
sudo systemctl restart nginx
Ну а далее переходим на http(s)://доменное_имя_сайта/awstats?config=доменное_имя_сайта