飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

AWStats网站统计服务器/VPS部署流程介绍

Author:飘易 Source:飘易
Categories:网络技术 PostTime:2025/12/4 10:10:16
正 文:

AWStats 是一款免费且强大的网站流量数据统计分析工具。它最主要的特点是: 

  •  基于服务器日志文件 (Log File): AWStats 不是通过在网页中嵌入代码(像 Google Analytics 那样)来收集数据,而是直接读取网站服务器产生的原始访问日志文件。这意味着它能提供最接近服务器端、最真实的流量数据。

  • 提供原始数据视角: 它可以分析出包括搜索引擎爬虫(蜘蛛)的访问、恶意机器人或垃圾流量、以及详细的 HTTP 错误代码等,这些数据对于网站安全维护和技术层面的分析非常有价值,是许多传统站长工具或 GA 难以全面获取的。

  • 报告内容丰富: 它可以统计访问量、唯一访问者、页面、点击次数、访问时长、来源国家/地区、关键词、浏览器、操作系统、文件下载等多种信息。

  • 图形化报告: 尽管它是基于日志的,但它也能生成易于理解的图表和报告。

简单来说,如果您是网站管理员或运维人员,需要从技术和服务器层面了解最真实的流量构成(包括各种爬虫和异常访问),AWStats 是一个非常实用的工具。

这篇文章,飘易就简单介绍下 AWStats 部署的流程,飘易的VPS系统是 Centos 7.9,web环境部署的LNMPA架构,具体套件是:

  • Mysql 5.7

  • PHP 7.4

  • Apache 2.4

一、Web环境调整

如果之前没启用日志,这里需要微调。

1、nginx 全局配置

/usr/local/nginx/conf/nginx.conf,修改:

# 在 http {} 块中定义 main 的日志格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
    '$status $body_bytes_sent "$http_referer" '
    '"$http_user_agent" "$http_x_forwarded_for"';


Nginx 变量 AWStats 对应信息 作用:

$remote_addr客户端 IP至关重要,用于独立访客、国家/地区统计。
$remote_user认证用户用于统计认证(Auth)用户访问。
[$time_local]访问时间用于时间、日期、高峰时段统计。
"$request"请求 URL/页面用于页面、入口/出口统计。
$statusHTTP 状态码用于错误页(4xx/5xx)和成功访问(2xx)统计。
$body_bytes_sent发送字节数用于带宽/流量统计。
"$http_referer"引用页 (Referer)用于来源网站和搜索引擎统计。
"$http_user_agent"用户代理 (User-Agent)用于浏览器、操作系统、机器人统计。
"$http_x_forwarded_for"真实客户端 IP(可选,但在多层代理时重要) 如果您的 VPS 前面还有 CDN 或其他负载均衡器,此字段会记录最真实的客户端 IP。


2、nginx 局部配置(vhost/虚拟主机)

/usr/local/nginx/conf/vhost/www.bearing.com.conf 里面启用日志:

access_log /home/wwwlogs/www.bearing.com/access.log main;

注意,这里wwwlogs下的域名目录需要手工创建( /home/wwwlogs/www.bearing.com/),否则nginx报错:

[emerg] 833#0: open() "/home/wwwlogs/www.bearing.com/access.log" failed (2: No such file or directory)

access.log 文件系统会自动创建,但目录不会。

access.log 默认的所有者是 root

如果需要修改为  www 用户和组,执行:

chown -R www:www /home/wwwlogs/

3、logrotate 轮换日志

logrotate 实现每个月轮换1个文件 (CentOS 7 安装中,logrotate 几乎总是默认安装的)

检查 logrotate  是否已安装:

rpm -q logrotate

如果已安装,它将返回版本号。


logrotate 简介

logrotate 是一个 Linux/Unix 系统工具,用于自动化管理系统和应用程序的日志文件。

  • 核心作用        

它通过一系列预设的规则,自动对日志文件进行:

轮换(Rotate): 将当前正在写入的日志文件重命名,然后创建一个新的空文件供服务继续写入。

压缩(Compress): 将旧的日志文件压缩以节省磁盘空间。

删除(Remove): 根据设定的保留策略,删除最旧的归档日志。

  • 主要好处        

节省磁盘空间: 防止日志文件无限增长,耗尽硬盘。

提高系统性能: 保持日志文件大小适中,方便读写和分析。

自动化管理: 无需手动干预,维护工作变得简单高效。


创建文件:/etc/logrotate.d/www.bearing.com,文件内容为:

/home/wwwlogs/www.bearing.com/access.log {
    # 轮换频率
    monthly
    
    # 关键:使用 年份 (%Y) 和 月份 (%m) 作为日期格式
    # 轮换后的文件名将是:access.log-202512
    dateformat -%Y%m
    dateext
    # 设置一个极大的值(例如 99999),实现不自动删除日志
    rotate 99999
    missingok           # 如果文件不存在,不报错
    compress            # 压缩旧日志文件(强烈建议,旧日志文件压缩成 .gz 格式)
    delaycompress       # 延迟压缩,直到下一次轮换
    notifempty          # 如果日志文件是空的,不进行轮换
    create 0644 www www # 轮换后创建新文件,并指定所有者和权限
    sharedscripts
    
    postrotate
        # 通知 Nginx 重新打开新的日志文件
        /usr/local/nginx/sbin/nginx -s reopen
    endscript
}

轮换后的日志大概如下:

当前日志:/home/wwwlogs/www.bearing.com/access.log

最近一次轮换 (未压缩):/home/wwwlogs/www.bearing.com/access.log-YYYYMM

更早的轮换 (已压缩):/home/wwwlogs/www.bearing.com/access.log-YYYYMM.gz


二、AWStats 配置

AWStats 的工作方式是,它会读取您指定的日志文件,然后将统计结果保存在一个数据库文件(通常是 .txt 格式)中。为了统计所有历史日志,您需要在执行 AWStats 更新时,让它能够找到并处理所有历史日志文件。

1、下载&安装AWStats

准备工作:Perl 解释器(大多数 Linux/Unix 系统默认安装)、Web 服务器(如 Apache、Nginx、IIS 等)

下载: 从 AWStats 官方网站 https://www.awstats.org/  下载最新的稳定版本。

解压: 将下载的压缩包解压到你服务器上一个合适的位置,例如 /usr/local/awstats。

配置 AWStats

AWStats 的配置文件通常位于 wwwroot/cgi-bin/awstats.model.conf。

复制模型文件并重命名为你想要分析的网站域名:/etc/awstats/awstats.yourdomain.conf

修改 awstats.yourdomain.conf:

# 站点域名 - 必须设置,用于识别内部链接和外部链接
SiteDomain="www.bearing.com"

# 日志文件路径 - 虽然会被命令行覆盖,但作为备份设置
LogFile="/home/wwwlogs/www.bearing.com/access.log"

# 日志格式定义:
# 必须自定义以匹配您的 Nginx 'main' 格式,该格式包含额外的 $http_x_forwarded_for 字段。
# %extra1 专门用于匹配这个额外的 XFF 字段。
LogFormat="%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %extra1"

# 主机别名列表 (用于将这些域名和IP视为同一站点)
HostAliases="bearing.com www.bearing.com localhost 127.0.0.1 REGEX[bearing\.com$]"

# 生成的txt数据库记录存放位置,使用绝对路径,请确保创建了该目录
DirData="/usr/local/awstats/wwwroot/data"

# DNS 解析,通常保持 0 (禁用) 以加快更新速度
DNSLookup=0

# 统计报告的语言 (cn 为简体中文)
Lang="cn"
# 图标目录
DirIcons="/awstatsicons"

# 启用GEOIP插件(国家、城市)
LoadPlugin="geoip2_country /usr/local/awstats/geoip/GeoLite2-Country.mmdb"
LoadPlugin="geoip2_city /usr/local/awstats/geoip/GeoLite2-City.mmdb"


2、GEOIP数据库

其中GEOIP数据库来自MaxMind ,MaxMind GeoLite2 中的 City、Country 等 mmdb 数据库文件下载链接,项目地址:

https://github.com/P3TERX/GeoLite.mmdb/releases

上传服务器的目录:/usr/local/awstats/geoip/GeoLite2-Country.mmdb | GeoLite2-City.mmdb

Perl依赖的模块是:GeoIP2::Database::Reader (from Maxmind)


centos先安装包管理器:

yum install perl-CPAN # 安装cpan
yum install perl-libwww-perl # 安装 LWP 及其依赖 (处理 HTTP 请求)


查看cpan是否安装:cpan

安装插件GeoIP2:

cpan install GeoIP2::Database::Reader (系统会编译一些gcc工具,很慢,耐心等待)
cpan install JSON::XS #解析时,需要这个模块


查看您的系统上通过 CPAN 安装了哪些 Perl 模块,先进入(cpan)提示符:

m /./  #提示符下输入 m /./,这将列出所有已安装的模块

返回:

m GeoIP2::Database::Reader  #查看指定模块
Reading '/root/.cpan/Metadata'
  Database was generated on Tue, 02 Dec 2025 07:41:01 GMT
Module id = GeoIP2::Database::Reader
    CPAN_USERID  MAXMIND (MaxMind, Inc. <support@maxmind.com>)
    CPAN_VERSION 2.006002
    CPAN_FILE    M/MA/MAXMIND/GeoIP2-2.006002.tar.gz
    UPLOAD_DATE  2019-06-18
    MANPAGE      GeoIP2::Database::Reader - Perl API for GeoIP2 databases
    INST_FILE    /usr/local/share/perl5/GeoIP2/Database/Reader.pm
    INST_VERSION 2.006002 <-----------出现安装的版本即为安装成功!!
m JSON::XS
Reading '/root/.cpan/Metadata'
  Database was generated on Tue, 02 Dec 2025 07:41:01 GMT
Module id = JSON::XS
    CPAN_USERID  MLEHMANN (Marc A. Lehmann <cpan@schmorp.de>)
    CPAN_VERSION 4.04
    CPAN_FILE    M/ML/MLEHMANN/JSON-XS-4.04.tar.gz
    UPLOAD_DATE  2025-09-08
    MANPAGE      JSON::XS - JSON serialising/deserialising, done correctly and fast
    INST_FILE    /usr/local/lib64/perl5/JSON/XS.pm
    INST_VERSION 4.04  <-----------出现安装的版本即为安装成功!!


3、生成AWStats数据

【临时测试】:

perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=bearing -update -LogFile="/home/wwwlogs/www.bearing.com/access.log"

config参数:

AWStats 在运行 awstats.pl 时,会按照以下规则查找配置文件:

它会查找一个预定义的配置目录(通常是 /etc/awstats/ 或 /usr/local/awstats/wwwroot/cgi-bin/ 的父目录)。

它会在该目录下寻找名为 awstats.【你的config值】.conf 的文件。


【定时任务】:

您可以创建一个脚本(例如 awstats.sh)来执行统计工作:

#!/bin/bash

# AWStats 配置文件名 awstats.[KEY].conf
CONF_FILE="bearing" 
# 日志文件目录
LOG_DIR="/home/wwwlogs/www.bearing.com"
# AWStats 执行脚本的实际路径
AWSTATS_PL="/usr/local/awstats/wwwroot/cgi-bin/awstats.pl" 
# 临时日志
TEMP_LOG_LIST="/tmp/awstats_log_${CONF_FILE}.txt"

# 1. 找到所有压缩的旧日志文件 (access.log-*.gz)
GZ_LOGS=$(find "$LOG_DIR" -maxdepth 1 -type f -name "access.log-*.gz" | sort -V)

# 2. 找到所有未压缩的当前和旧日志文件 (access.log 和 access.log-YYYYMM)
PLAIN_LOGS=$(find "$LOG_DIR" -maxdepth 1 -type f \( -name "access.log" -o -name "access.log-*" ! -name "*.gz" \) | sort -V)

# 3. 清空目标文件
> "$TEMP_LOG_LIST"

# 4. (可选) 处理压缩文件 (如果存在)
if [ -n "$GZ_LOGS" ]; then
    echo "$GZ_LOGS" | tr ' ' '\n' | xargs zcat >> "$TEMP_LOG_LIST" 2>/dev/null
fi

# 5. 处理纯文本文件 (包括当前的 access.log)
if [ -n "$PLAIN_LOGS" ]; then
    echo "$PLAIN_LOGS" | tr ' ' '\n' | xargs cat >> "$TEMP_LOG_LIST" 2>/dev/null
fi

# 运行 AWStats
#    AWStats 能够识别文件后缀并处理未压缩或 .gz 压缩文件。
#    -LogFile="$TEMP_LOG_LIST" 告诉 AWStats 从临时文件中读取要分析的文件列表。
#    -config=$CONF_FILE 指定 AWStats 使用哪个站点的配置文件。
#    -LogFormat=1 智能对应 Nginx 的标准 combined 格式。这里不定义,放AWStats配置文件里定义!
perl $AWSTATS_PL -config=$CONF_FILE -update -LogFile="$TEMP_LOG_LIST"

# 检查 AWStats 是否运行成功 (可选,用于 Cron Job 监测)
if [ $? -eq 0 ]; then
    echo "$(date) - AWStats update successful for $CONF_FILE."
else
    echo "$(date) - AWStats update FAILED for $CONF_FILE."
fi

# 清理临时文件
rm -f "$TEMP_LOG_LIST"

cron 定期运行 .sh 脚本

通过这个脚本,AWStats 会逐个读取列表中的所有日志文件,将它们合并统计到同一个数据库中(awstats.yourdomain.txt),从而实现统计所有历史日志数据的目标。 请确保这个脚本是通过 cron 定期运行的。

#crontab -l  先查看当前的任务列表
#crontab -e  编辑(实际位置:/var/spool/cron)
# 每天 1:0 运行一次,更新统计
# 指定解释器 sh(脚本无需执行权限);若无sh,则需赋予脚本执行权限:chmod +x 名称.sh
0 1 * * * sh /etc/awstats/awstats.bearing.sh >/dev/null 2>&1


4、查看AWStats报告前nginx+apache调整

Nginx 配置:

只需增加图片配置

# awstats : Nginx 直接处理图片 (DirIcons="/awstatsicons") 
# 使用 ^~ 确保优先级高于其他正则匹配,且放在通用图片规则前面
location ^~ /awstatsicons/ {
    alias /usr/local/awstats/wwwroot/icon/;
    expires 30d;
    break;
}


Apache 全局配置 httpd.conf

LoadModule cgid_module modules/mod_cgid.so # 取消注释,加载cgi模块
<IfModule cgid_module>
    # ScriptSock: On threaded servers, designate the path to the UNIX
    # socket used to communicate with the CGI daemon of mod_cgid.
    ScriptSock /tmp/httpd-cgisock
</IfModule>


Apache 局部配置(vhost)增加:

# AWStats 配置
AddHandler cgi-script .pl
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
<Directory "/usr/local/awstats/wwwroot/cgi-bin">
    Options +ExecCGI
    AllowOverride None
    # --- Basic Auth 认证配置开始 ---
    AuthType Basic
    AuthName "Auth Login"
    # 指定密码文件的路径
    AuthUserFile /etc/awstats/.htpasswd
    # 仅指定用户可以访问--修改成实际用户!!
    Require user bearing
    # --- Basic Auth 认证配置结束 ---
</Directory>


Apache 添加 Basic Auth 认证:

首个用户 -c:

/usr/local/apache/bin/htpasswd -c /etc/awstats/.htpasswd bearing

第2个用户(不能用c参数,会覆盖):

/usr/local/apache/bin/htpasswd /etc/awstats/.htpasswd bearing2


5、查看AWStats的web端报告

web端访问网址:

https://www.piaoyi.org/awstats/awstats.pl?config=bearing

config传递具体的参数即可。

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:没有了
下一篇:Gmail邮箱转发到QQ邮箱:Delivery Status Notification (Failure)
0条评论 “AWStats网站统计服务器/VPS部署流程介绍”
No Comment .
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有