nginx + awstats 部署记录

版本:
Tengine/2.2.0 (nginx/1.8.1)
awstats-7.6

一、安装Tengine 与 环境

  1、下载安装包,并编译安装

tar -zxvf tengine-2.2.0.tar.gz
cd tengine-2.2.0
./configure --prefix=/usr/local/nginx
make
make install

  2.修改Nginx日志格式为:

  注释掉tengine自带的格式

log_format  main  ‘$remote_addr - $remote_user [$time_local] "$request" ‘
                    ‘$status $body_bytes_sent "$http_referer" ‘
                    ‘"$http_user_agent" $http_x_forwarded_for‘;

  3、安装CPAN

wget http://search.cpan.org/CPAN/authors/id/A/AN/ANDK/CPAN-2.10.tar.gz
tar -xf CPAN-2.10.tar.gz
cd CPAN-2.10
perl Makefile.PL
make
make install

  4、安装FCGI和FCGI::ProcManager

wget http://search.cpan.org/CPAN/authors/id/B/BO/BOBTFISH/FCGI-ProcManager-0.24.tar.gz
tar -xf FCGI-ProcManager-0.24.tar.gz
cd FCGI-ProcManager-0.24
perl Makefile.PL
make&&make install

  4.1 创建FCGI启动文件

  将以下内容写入新建 的/usr/local/nginx/sbin/fcgi文件中

[[email protected] sbin]# cat /usr/local/nginx/sbin/fcgi 
use FCGI;
#perl -MCPAN -e ‘install FCGI‘
use Socket;
use POSIX qw(setsid);
#use Fcntl;
require ‘syscall.ph‘;
&daemonize;
#this keeps the program alive or something after exec‘ing perl scripts
END() { } BEGIN() { }
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=".shift()."\n"; };
eval q{exit};
if ([email protected]) {
        exit unless [email protected] =~ /^fakeexit/;
};
&main;
sub daemonize() {
    chdir ‘/‘                 or die "Can‘t chdir to /: $!";
    defined(my $pid = fork)   or die "Can‘t fork: $!";
    exit if $pid;
    setsid                    or die "Can‘t start a new session: $!";
    umask 0;
}
sub main {
#$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 );
$socket = FCGI::OpenSocket( "/usr/local/nginx/fastcgi_temp/perl_cgi-dispatch.sock", 10 );
#use UNIX sockets - user running this script must have w access to the ‘nginx‘ folder!!
$request = FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket );
if ($request) { request_loop()};
FCGI::CloseSocket( $socket );
}
sub request_loop {
while( $request->Accept() >= 0 ) {
#processing any STDIN input from WebServer (for CGI-POST actions)
$stdin_passthrough =‘‘;
$req_len = 0 + $req_params{‘CONTENT_LENGTH‘};
if (($req_params{‘REQUEST_METHOD‘} eq ‘POST‘) && ($req_len != 0) ){
my $bytes_read = 0;
while ($bytes_read < $req_len) {
my $data = ‘‘;
my $bytes = read(STDIN, $data, ($req_len - $bytes_read));
last if ($bytes == 0 || !defined($bytes));
$stdin_passthrough .= $data;
$bytes_read += $bytes;
 }
}
#running the cgi app
if ( (-x $req_params{SCRIPT_FILENAME}) && #can I execute this?
(-s $req_params{SCRIPT_FILENAME}) && #Is this file empty?
(-r $req_params{SCRIPT_FILENAME})     #can I read this file?
){
pipe(CHILD_RD, PARENT_WR);
my $pid = open(KID_TO_READ, "-|");
unless(defined($pid)) {
print("Content-type: text/plain\r\n\r\n");
print "Error: CGI app returned no output - Executing $req_params
{SCRIPT_FILENAME} failed !\n";
next;
}
if ($pid > 0) {
close(CHILD_RD);
print PARENT_WR $stdin_passthrough;
close(PARENT_WR);
while(my $s = <KID_TO_READ>) { print $s; }
close KID_TO_READ;
waitpid($pid, 0);
} else {
foreach $key ( keys %req_params){
$ENV{$key} = $req_params{$key};
}
# cd to the script‘s local directory
if ($req_params{SCRIPT_FILENAME} =~ /^(.*)\/[^\/]+$/) {
chdir $1;
}
close(PARENT_WR);
close(STDIN);
#fcntl(CHILD_RD, F_DUPFD, 0);
syscall(&SYS_dup2, fileno(CHILD_RD), 0);
#open(STDIN, "<&CHILD_RD");
exec($req_params{SCRIPT_FILENAME});
die("exec failed");
          }
       }
else {
print("Content-type: text/plain\r\n\r\n");
print "Error: No such CGI app - $req_params{SCRIPT_FILENAME} may not exist or is
not executable by this process.\n";
       }
   }
} 
赋予可执行权限:
# chmod +x  /usr/local/nginx/sbin/fcgi

  4.2 启动FPM(FastCGI 进程管理器) 

perl /usr/local/nginx/sbin/fcgi >/dev/null 2>$1 

二、安装与配置Awstats

  1、安装主程序awstats-7.6

wget http://awstats.sourceforge.net/files/awstats-7.6.tar.gz
tar -xzvf awstats-7.6.tar.gz
mv awstats-7.6 /home/work/
cd /home/work/wstats-7.6
chown -R root.root /usr/local/awstats
cd ./tools/
./awstats_configure.pl
脚本交互1:
Config file path (‘none‘ to skip web server setup):
因为在此我们使用的是nginx,所以填写none

脚本交互2:
Do you want me to build a new AWStats config/profile
file (required if first install) [y/N]
输入Y创建一个新的统计配置文件。

脚本交互3:
Your web site, virtual server or profile name:
> www.test.com
在这输入自己的网站域名

脚本交互4:
Directory path to store config file(s) (Enter for default):
>
使用默认配置,生成配置文件
后面的直接按回车就可以

  1.1 修改awsatats要分析的nginx日志文件

  sed -i ‘s#LogFile="/var/log/httpd/mylog.log"#LogFile="/home/logs/nginx/access_%YYYY-24%MM-24%DD-24.log"#g‘ /etc/awstats/awstats.www.baidu.com.conf

  1.2 修改awstats的数据库文件,纯文本格式

sed -i ‘s#DirData="/var/lib/awstats"#DirData="/home/work/awstats-7.6/data"#g‘ /etc/awstats/awstats.www.baidu.com.conf  

  

  1.3 创建awstats统计结果存放目录

  现在我们需要用awstats来生成对日志的统计分析信息出来了;

  由于我们用的是支持perl的FCGI动态化访问页面,所以此处我们只需要直接更新数据库即可;

  FCGI程序会自动将数据库以动态页面的形式展现出来,无须再手动生成静态页面了;

  本处用脚本配合计划任务完成。

  # vim awstats_up.sh

#!/bin/bash -
/home/work/awstats-7.6/wwwroot/cgi-bin/awstats.pl -update -config=www.baidu.com >/dev/null 2>&1

  

  或手动执行:

/home/work/awstats-7.6/wwwroot/cgi-bin/awstats.pl -update -config=www.baidu.com 
时间: 2024-08-02 06:16:28

nginx + awstats 部署记录的相关文章

Linux下FastDFS分布式存储-总结及部署记录

https://www.cnblogs.com/kevingrace/p/8471827.html 一.分布式文件系统介绍分布式文件系统:Distributed file system, DFS,又叫做网络文件系统:Network File System.一种允许文件通过网络在多台主机上分享的文件系统,可让多机器上的多用户分享文件和存储空间.特点:在一个分享的磁盘文件系统中,所有节点对数据存储区块都有相同的访问权,在这样的系统中,访问权限就必须由客户端程序来控制.分布式文件系统可能包含的功能有:

Linux系统下yum镜像源环境部署记录

之前介绍了Linux环境下本地yum源配置方法,不过这个是最简单最基础的配置,在yum安装的时候可能有些软件包不够齐全,下面说下完整yun镜像源系统环境部署记录(yum源更新脚本下载地址:https://pan.baidu.com/s/1miMNPgc     提取密码:hq6u): 1)安装nginx,用于yum镜像源访问配置 [[email protected] ~]# yum -y install gcc pcre-devel zlib-devel openssl-devel [[emai

Docker网络解决方案-Flannel部署记录

Docker跨主机容器间网络通信实现的工具有Pipework.Flannel.Weave.Open vSwitch(虚拟交换机).Calico实现跨主机容器间的通信.其中Pipework.Weave.Flannel,三者的区别是: Weave的思路 在每个宿主机上布置一个特殊的route的容器,不同宿主机的route容器连接起来. route拦截所有普通容器的ip请求,并通过udp包发送到其他宿主机上的普通容器. 这样在跨机的多个容器端看到的就是同一个扁平网络. weave解决了网络问题,不过部

rsyslog+loganalyzer日志服务器部署记录

日志功能对于操作系统是相当重要的,在日常运维工作中,无论是系统还是应用等出了任何问题,我们首先想到的便是分析日志,查找问题原因.自从CentOS 6系统开始,CentOS便开始使用rsyslog做为日志收集服务了,相对于之前的syslog它能够支持多线程,数据库存储,支持更多了传输协议等等优点.之前介绍了Linux下rsyslog日志收集服务环境部署记录,下面再结合LogAnalyzer进行部署说明. LogAnalyzer 则是一款基于 PHP 开发的 syslog 日志和其他网络事件数据的

nginx安装部署

转自http://www.cnblogs.com/zhuhongbao/archive/2013/06/04/3118061.html Nginx安装部署 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Igor Sysoev 为俄罗斯访问量第二的 Rambler.ru 站点开发的,第一个公开版本0.1.0发布于2004年10月4日.其将源代码以类BSD许可证的形式发布,因它的

Nginx安装问题记录

安装时遇到了2个问题,特此记录下. 问题1:Public key for *.rpm is not installed 解决方法:在repo文件中加上"gpgcheck=0",默认没有这一项,看来系统默认是要check的,这个还是头一次知道. 问题2:./configure: error: the HTTP rewrite module requires the PCRE library 解决方法:yum -y install openssl openssl-devel Nginx安装

Docker可视化界面(Consul+Shipyard+Swarm+Service Discover)部署记录

前面一篇说到了Docker管理工具-Swarm部署记录,基于这个环境,下面记录下Docker可视化界面部署过程: 1)下载相关惊喜 manager-node节点(182.48.115.237) [[email protected] ~]# docker pull progrium/consul [[email protected] ~]# docker pull rethinkdb [[email protected] ~]# docker pull shipyard/shipyard [[em

nginx + unicorn 部署rails项目

nginx + unicorn  部署 rails 项目,顾名思义要先安装nginx和unicorn 一 安装 安装nginx: sudo apt-get install nginx 安装unicorn: gem install unicorn 二 配置 1 在你项目的config文件夹下添加一个unicorn.rb文件,添加代码(样列:http://unicorn.bogomips.org/examples/unicorn.conf.rb) 我的如下: 1 module Rails 2 cla

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器

Nginx搭建部署Web服务器并与NFS结合搭建负载均衡服务器 一.搭建NginxWeb服务器     此种方式是用yum安装Nginx,为保证安装成功需在安装之前提前安装epel扩展源.     用yum安装Nginx     关闭系统防火墙           查看Nginx配置文件          安装完成后启动Nginx并查看其运行状态          然后在客户端浏览器里面输入Nginx服务器的IP地址即可验证Nginx工作正常      二.搭建NFS服务器     NFS:网络