poloniumv's

Прикручиваем AWStats к nginx в Arch Linux

27 ноября 2017 г. 17:09

Возникла необходимость собирать статистику посещений одного из 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=доменное_имя_сайта