nginx+awstats安裝過程

awstats來來回回也裝了好多遍了,每次都是現裝現查,隱約的記得整個配置比較麻煩,中間有幾個須要特別注意的地方,又記不得那些須要特殊對待,只能邊找資料邊回憶,最終仍是搞出來了,在此分享給你們。php

首先去官網下載最新的安裝包。css

wget http://jaist.dl.sourceforge.net/project/awstats/AWStats/7.3/awstats-7.3.zip
unzip awstats-7.3.zip
cd awstats-7.3

查看下配置結構html

[root@localhost awstats-7.3]# ls
docs  README.TXT  tools  wwwroot
[root@localhost awstats-7.3]# tree -d
.
├── docs
│   ├── images
│   └── scripts
├── tools
│   ├── nginx
│   ├── webmin
│   └── xslt
└── wwwroot
    ├── cgi-bin
    │   ├── lang
    │   │   ├── tooltips_f
    │   │   ├── tooltips_m
    │   │   └── tooltips_w
    │   ├── lib
    │   └── plugins
    │       └── example
    ├── classes
    │   └── src
    ├── css
    ├── icon
    │   ├── browser
    │   ├── clock
    │   ├── cpu
    │   ├── flags
    │   ├── mime
    │   ├── os
    │   └── other
    └── js

28 directories
[root@localhost awstats-7.3]#     

進入tools目錄找到awstats_configure.pl 文件而且運行,它是一個嚮導,能夠根據它的指示建立一個配置文件。 python

-----> Check for web server install

Enter full config file path of your Web server.
Example: /etc/httpd/httpd.conf
Example: /usr/local/apache2/conf/httpd.conf
Example: c:\Program files\apache group\apache\conf\httpd.conf
Config file path ('none' to skip web server setup):
#> none  #由於咱們這裏用的是 Nginx,因此寫 none,跳過。
Your web server config file(s) could not be found.
You will need to setup your web server manually to declare AWStats
script as a CGI, if you want to build reports dynamically.
See AWStats setup documentation (file docs/index.html)

-----> Update model config file '/usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf'
  File awstats.model.conf updated.

-----> Need to create a new config file ?
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N] ?
#> y	#y 建立一個新的統計配置
-----> Define config file name to create
What is the name of your web site or profile analysis ?
Example: www.mysite.com
Example: demo
Your web site, virtual server or profile name:
#> www.moabc.net		#統計網站的域名 例:www.xxx.com
-----> Define config file path
----> Add update process inside a scheduler
Sorry, configure.pl does not support automatic add to cron yet.
You can do it manually by adding the following command to your cron:
/usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=www.moabc.net  
               #回頭把該命令填入crontab 按指定時間執行
Or if you have several config files and prefer having only one command:
/usr/local/awstats/tools/awstats_updateall.pl now
Press ENTER to continue...		回車繼續

A SIMPLE config file has been created: /etc/awstats/awstats.www.moabc.net.conf  
            #新配置文件所在的路徑
You should have a look inside to check and change manually main parameters.
You can then manually update your statistics for 'www.moabc.net' with command:
> perl awstats.pl -update -config=www.moabc.net
You can also build static report pages for 'www.moabc.net' with command:
> perl awstats.pl -output=pagetype -config=www.moabc.net

Press ENTER to finish...
In which directory do you plan to store your config file(s) ? Default: /etc/awstats Directory path to store config file(s) (Enter for default): #>

回車完成嚮導,接下來修改 www.xxx.com 的統計配置.linux

通常狀況這個文件的位置是/etc/awstats目錄下,文件名爲awstats.www.xxx.com.conf。nginx

這裏面主要修改幾個地方web

LogFile="/var/log/httpd/mylog.log"shell

改成數據庫

LogFile="/opt/nginx/logs/access_%YYYY-0%MM-0%DD-0.logapache

而後保存,後續須要修改的地方我們一會再說。

接下來就能夠生產txt文件了,運行命令

[root@localhost wwwroot]# cd /home/awstats-7.3/wwwroot/cgi-bin/
[root@localhost cgi-bin]# ls
awdownloadcsv.pl awredir.pl awstats-fcgi.php awstats.model.conf awstats.pl lang lib plugins
[root@localhost cgi-bin]# ./awstats.pl -update -config=www.megaunity.com
Create/Update database for config "/etc/awstats/awstats.www.megaunity.com.conf" by AWStats version 7.3 (build 20140126)
From data in log file "/home/log/nginx/access_20140714.log"...
Phase 1 : First bypass old records, searching new record...
Direct access after last parsed record (after line 220965)
Jumped lines in file: 220965
Found 220965 already parsed records.
Parsed lines in file: 0
Found 0 dropped records,
Found 0 comments,
Found 0 blank records,
Found 0 corrupted records,
Found 0 old records,
Found 0 new qualified records.
[root@localhost cgi-bin]#



能夠看到我是經過awstats.pl文件生產的數據文件,該文件位置在/var/lib/awstats下面。

[root@localhost cgi-bin]# ls /var/lib/awstats/
awstats072014.www.megaunity.com.txt

這個awstats072014.www.xxx.com.txt就是生產的數據庫文件,可是我們怎麼能瀏覽瀏覽它呢,我經過不少博客的文章來搭建這個nginx環境下使用awstats,可是我瀏覽的全部博客都是經過awstats安裝目錄下一個自帶的perl文件awstats_buildstaticpages.pl來生成靜態頁面瀏覽,每一個博客都互相抄襲,都說nginx對perl支持很差。其實「當年」搭建awstats的前輩可能確實遇到了nginx對perl支持很差的問題,可是這麼多年過去了,軟件一直在不斷更新,awstats已經能夠像在apache下那樣直接瀏覽url:http://awstats.cs.yilian.cc/cgi-bin/awstats.pl?config=www.xxx.com。

這是什麼?打開看一下?

[root@localhost awstats-7.3]# cat tools/nginx/awstats-nginx.conf 
server {
        listen 127.0.0.1:80;
        server_name localhost;
        access_log /var/log/nginx/localhost.access_log main;
        error_log /var/log/nginx/localhost.error_log info;
        root /var/www/localhost/htdocs;
        index index.html;

        # Restrict access
        #auth_basic "Restricted";
        #auth_basic_user_file /etc/awstats/htpasswd;


        # Static awstats files: HTML files stored in DOCUMENT_ROOT/awstats/
        location /awstats/classes/ {
                alias /usr/share/awstats/wwwroot/classes/;
        }

        location /awstats/css/ {
                alias /usr/share/awstats/wwwroot/css/;
        }

        location /awstats/icon/ {
                alias /usr/share/awstats/wwwroot/icon/;
        }

        location /awstats-icon/ {
        alias /usr/share/awstats/wwwroot/icon/;
    }

        location /awstats/js/ {
                alias /usr/share/awstats/wwwroot/js/;
        }

        # Dynamic stats.
        location ~ ^/cgi-bin/(awredir|awstats)\.pl {
                gzip off;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_param SCRIPT_FILENAME /usr/share/awstats/wwwroot/cgi-bin/fcgi.php;
                fastcgi_param X_SCRIPT_FILENAME /usr/share/awstats/wwwroot$fastcgi_script_name;
                fastcgi_param X_SCRIPT_NAME $fastcgi_script_name;
                include fastcgi_params;
        }
}
[root@localhost awstats-7.3]# cat tools/nginx/awstats-fcgi.php 
<?php
$descriptorspec = array(
        0 => array('pipe', 'r'),  // stdin is a pipe that the child will read from
        1 => array('pipe', 'w'),  // stdout is a pipe that the child will write to
        2 => array('pipe', 'w')   // stderr is a file to write to
);

$newenv = $_SERVER;
$newenv['SCRIPT_FILENAME'] = $_SERVER['X_SCRIPT_FILENAME'];
$newenv['SCRIPT_NAME'] = $_SERVER['X_SCRIPT_NAME'];

if (is_executable($_SERVER['X_SCRIPT_FILENAME'])) {
        $process = proc_open($_SERVER['X_SCRIPT_FILENAME'], $descriptorspec, $pipes, NULL, $newenv);

        if (is_resource($process)) {
                fclose($pipes[0]);
                $head = fgets($pipes[1]);

                while (strcmp($head, "\n")) {
                        header($head);
                        $head = fgets($pipes[1]);
                }

                fpassthru($pipes[1]);
                fclose($pipes[1]);
                fclose($pipes[2]);

                $return_value = proc_close($process);
        } else {
                header('Status: 500 Internal Server Error');
                echo('Internal Server Error');
        }
} else {
        header('Status: 404 Page Not Found');
        echo('Page Not Found');
}

我看到了一個php文件和一個nginx配置文件,不用說,很明顯是模板。我想若是不支持爲何要給模板呢。我打開了配置文件看了一下,發現awstats把fcgi給了9000端口,這不就是php-fpm麼?我忽然覺的,是否是nginx不能像apache那樣直接處理perl可是他能處理php啊,這個php文件就應該就是實現了awstats.pl同樣的功能。

修改了fastcgi_param SCRIPT_FILENAME上下兩行的awstats-fcgi.php的位置,並把它拷貝到cgi-bin/目錄下,配置文件複製到相應的nginx配置文件目錄下。重載nginx,訪問下試試。

你會發現能夠經過http://awstats.cs.yilian.cc/cgi-bin/awstats.pl?config=www.xxx.com這種形式正常訪問了對不對。

 配置文件的調整

以往咱們都是經過awstats_configure.pl想到去建立配置文件,卻不知咱們能夠經過模板文件去拷貝而後使用include來引出模板配置文件,如個人配置文件以下

[root@localhost awstats]# ls
awstats.www.xxx.com.conf  awstats.www.xxx.com.conf  awstats.xxx.cc.conf  common.conf

common.conf就是個人模板文件。

[root@localhost awstats]# cat awstats.www.xxx.com.conf 
Include "common.conf"
LogFile="/home/log/nginx/access_%YYYY-0%MM-0%DD-24.log"
SiteDomain="www.xxx.com"  
DirData="/var/lib/awstats"  
[root@localhost awstats]# 

這樣方便管理 每一個配置文件也不大。

修改模板配置,是awstats中文亂碼恢復。

經過網上的文章介紹須要修改配置文件選項:#LoadPlugin="decodeutfkeys",打開該選項取消註釋。

可是會發生報錯:

Error: Plugin load for plugin 'decodeutfkeys' failed with return code: Error: Can't locate URI/Escape.pm in @INC (@INC contains: /etc/perl /usr/local/lib/perl/5.10.1 /usr/local/share/perl/5.10.1 /usr/lib/perl5 /usr/share/perl5 /usr/lib/perl/5.10 /usr/share/perl/5.10 /usr/local/lib/site_perl . /usr/share/awstats/lib /usr/share/awstats/plugins) at (eval 3) line 1.
Setup ('/etc/awstats/awstats.bbsnuaa.conf' file, web server or permissions) may be wrong.
Check config file, permissions and AWStats documentation (in 'docs' directory).
wget http://search.cpan.org/CPAN/authors/id/G/GA/GAAS/URI-1.36.tar.gz

解壓縮文件
tar zxvf URI-1.36.tar.gz

進入解壓縮後目錄
cd  URI-1.36

而後 perl Makefile.PL
make
make install

報錯繼續,而後使用另外一種方法

安裝URI/Escape模塊

一種是經過perl shell網絡安裝:

[root@localhost cgi-bin]# perl -MCPAN -e 'install Encode'
Can't locate CPAN.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.

缺乏CPNA,而後下載CPNA 

wget http://www.cpan.org/authors/id/A/AN/ANDK/CPAN-1.9600.tar.gz

tar -zxvf CPAN-1.9600.tar.gz       

cd CPAN-1.9600 

perl Makefile.PL 

[root@localhost URI-1.60]# perl Makefile.PL
Can't locate ExtUtils/MakeMaker.pm in @INC (@INC contains: /usr/local/lib64/perl5 /usr/local/share/perl5 /usr/lib64/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib64/perl5 /usr/share/perl5 .) at Makefile.PL line 2.

仍是報錯,前先後後發現這個perl太費勁了,少了好多東西,沒辦法只好一個個安裝。

yum install perl-Time-HiRes    

最後執行如下三部恢復。

perl -MCPAN -e 'install Encode'
perl -MCPAN -e 'install URI::Escape'

root@server ~]# perl -MCPAN -e shell

>install URI::Escape
解決亂碼問題。

 

安裝QQ純真地址庫

經過車東的博客學習到了安裝QQ地址庫的方法,可是安裝過程至關慘烈啊。

安裝以下:

把 qqhostinfo.pm,QQWry.dat,qqwry.pl三個文件拷貝到/home/awstats-7.3/wwwroot/cgi-bin/plugins下面
而後修改qqwry.pl文件,把裏面的路徑修改正確。
 my $ipfile="${DIR}/plugins/qqwry.dat"
注意${DIR}指定路徑是什麼,對應了的安裝路徑。
而後再執行 vim  defualt.conf(以前的模板配置文件)
添加:LoadPlugin="qqhostinfo"

到此QQ地址庫算是安裝完成了。

安裝國家地理插件

1 由於我以前安裝過,因此我就以前如今配置文件添加了插件信息。
2 因此我仍是直接修改模板配置文件default.conf添加插件信息
3 LoadPlugin="geoip GEOIP_STANDARD /home/awstats-7.3/wwwroot/cgi-bin/GeoIP.dat"
4 LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /home/awstats-7.3/wwwroot/cgi-bin/GeoLiteCity.dat"
5 這裏我參考了http://blog.csdn.net/kumu_linux/article/details/8146958的博客
須要的安裝包以下:
wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz
而後把兩個文件移入/home/awstats-7.3/wwwroot/cgi-bin目錄中gunzip解壓便可。

GeoIP安裝步驟以下:

先下載GeoIP C庫:

去https://www.maxmind.com/download/geoip/api/c/下載GeoIP-1.4.8.tar.gz 

# tar xf GeoIP-1.4.8.tar.gz 

cd進入解壓目錄,執行以下操做安裝

# ./configure ; make && make install 

接下來下載GeoIP perl庫:

去https://www.maxmind.com/download/geoip/api/perl/下載Geo-IP-1.40.tar.gz 

# tar xf Geo-IP-1.40.tar.gz 

cd 進入解壓目錄,執行以下操做安裝

perl Makefile.PL LIBS='-L/usr/local/lib' 

//這裏必需使用這種方法安裝,筆者嘗試把/usr/local/lib加入/etc/ld.so.conf.d/geoip.conf並執行ldconfig,單獨執行perl Makefile.PL仍是發現不了GeoIP的C庫,因此只能以perl Makefile.PL LIBS='-L/usr/local/lib' 這種方式執行

# make && make install

 rm -rf /var/lib/awstats/* #刪除舊的統計數據

/usr/local/awstats/tools/awstats_updateall.pl now

從新生成數據便可,查看監控頁面就能夠獲取來訪者的國家和地區了

 

這裏面主要容易犯的錯誤就是發現不了GeoIP的C庫,啥事GEOIP的C庫 就是以前安裝的GeoIP-1.4.8.tar.gz 這個東西,這個東西安裝以後你會發現以下目錄裏面會多出東西

1 [root@localhost plugins]# ls /usr/local/lib/
2 libGeoIP.a  libGeoIP.la  libGeoIP.so  libGeoIP.so.1  libGeoIP.so.1.4.8  libGeoIPUpdate.a  libGeoIPUpdate.la  libGeoIPUpdate.so  libGeoIPUpdate.so.0  libGeoIPUpdate.so.0.0.0
3 [root@localhost plugins]# 
4 這些文件就是正確安裝了C庫出來的東西,若是沒有 那麼說明你C庫安裝不成功 ,建議查看是否是服務器少了支持perl的包,或者gcc這些基礎的東西。

 

  參考文檔:http://blog.csdn.net/kumu_linux/article/details/8146958

       http://www.chedong.com/tech/awstats.html

相關文章
相關標籤/搜索