测试与质量的关系 测试有助于提高软件的质量,但是提高软件的质量不能依赖于测试。测试与质量的关系很象在考试中“检查”与“成绩”的关系。 学习好的学生,在考试时通过认真检查能减少因疏忽而造成的答题错误,从而“提高”了考试成绩(取得他本来就该得的好成绩)。 而学习差的学生,他原本就不会做题目,无论检查多么细心,也不能提高成绩。 所以说,软件的高质量是设计出来的,而不是靠测试修补出来的。 I love U software testing

nginx与awstats的使用

上一篇 / 下一篇  2009-02-17 09:30:25


[root@test ~]# ls

awstats-6.9-1.noarch.rpm

安装awstats可以参考我的文章http://blog.chinaunix.net/u2/71666/showart.php?id=1988397

完成向导,接下来修改 www.test.cn 的统计配置


[root@test awstats]# pwd

/etc/awstats
[root@test awstats]# vi awstats.www.test.com.conf 

找到统计的日志文件的路径

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

改为 

LogFile="/usr/local/nginx/logs/test.access_%YYYY-24%MM-24%DD-24.log"

LogFormat=1

改为
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %otherquot"

[root@test awstats]# cp awstats.www.test.com.conf awstats.www.good.cn.conf 

[root@test awstats]# vi awstats.www.good.cn.conf 

需要注意一下几行
awstats.www.good.com.conf
LogFile="/usr/local/nginx/logs/good.access_%YYYY-24%MM-24%DD-24.log"
LogFormat = "%host %other %logname %time1 %methodurl %code %bytesd %refererquot %uaquot %otherquot"
SiteDomain="www.good.com"
HostAliases="good.com www.good.com 127.0.0.1 localhost"

默认编译安装的nginx对cgi的支持并不好(所以在编译的时候一般都没打开这个功能)
google了一把。大家都用fastcgi来支持。就照搬吧
[root@test html]# pwd
/usr/local/nginx/html
[root@test html]# mkdir cgi-bin
[root@test html]# cd cgi-bin/
[root@test cgi-bin]# vi fcgi_perl

#!/usr/bin/perl -w

use FCGI;
use Socket;
use FCGI::ProcManager;
sub shutdown { FCGI::CloseSocket($socket); exit; }
sub restart { FCGI::CloseSocket($socket); &main; }
use sigtrap 'handler', \&shutdown, 'normal-signals';
use sigtrap 'handler', \&restart, 'HUP';
require 'syscall.ph';
use POSIX qw(setsid);
 
#&daemonize; we don't daemonize when running under runsv

#this keeps the program alive or something after exec'ing perl scripts

END() { }
BEGIN() { }
{
no warnings;
*CORE::GLOBAL::exit = sub { die "fakeexit\nrc=" . shift() . "\n"; };
};
eval q{exit};
if ($@) {
exit unless $@ =~ /^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 {
#如果使用 IP sockets

#$socket = FCGI::OpenSocket( "127.0.0.1:8999", 10 );

#如果使用 UNIX sockets

#$socket = FCGI::OpenSocket( "/var/run/perl_cgi-dispatch.sock", 10 );

 
#foreach $item (keys %ENV) { delete $ENV{$item}; }

#设置fastcgi进程数,默认四个

my $n_processes = $ENV{FCGI_NPROCESSES} || 4;
$proc_manager = FCGI::ProcManager->new( {n_processes => $n_processes} );
#使用unix socket

$socket = FCGI::OpenSocket( "$ENV{FCGI_SOCKET_PATH}", 10 );
#设置Socket权限

chmod 0777, $ENV{FCGI_SOCKET_PATH};
 
; #use UNIX sockets - user running this script. must have w access to the 'nginx' folder!!

$request =
FCGI::Request( \*STDIN, \*STDOUT, \*STDERR, \%req_params, $socket,
&FCGI::FAIL_ACCEPT_ON_INTR );
$proc_manager->pm_manage();
if ($request) { request_loop() }
FCGI::CloseSocket($socket);
}
 
sub request_loop {
while ( $request->Accept() >= 0 ) {
$proc_manager->pm_pre_dispatch();
 
#processing any STDIN input from WebServer (for CGI-POST actions)

$stdin_passthrough = '';
{ no warnings; $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?

( -$req_params{SCRIPT_FILENAME} ) && #Is this file empty?

( -$req_params{SCRIPT_FILENAME} ) #can I read this file?

)
{
pipe( CHILD_RD, PARENT_WR );
pipe( PARENT_ERR, CHILD_ERR );
my $pid = open( CHILD_O, "-|" );
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;
}
$oldfh = select(PARENT_ERR);
$| = 1;
select(CHILD_O);
$| = 1;
select($oldfh);
if ( $pid > 0 ) {
close(CHILD_RD);
close(CHILD_ERR);
print PARENT_WR $stdin_passthrough;
close(PARENT_WR);
$rin = $rout = $ein = $eout = '';
vec( $rin, fileno(CHILD_O), 1 ) = 1;
vec( $rin, fileno(PARENT_ERR), 1 ) = 1;


TAG:

 

评分:0

我来说两句

日历

« 2024-04-18  
 123456
78910111213
14151617181920
21222324252627
282930    

数据统计

  • 访问量: 94975
  • 日志数: 112
  • 图片数: 1
  • 文件数: 1
  • 书签数: 1
  • 建立时间: 2007-01-16
  • 更新时间: 2010-06-28

RSS订阅

Open Toolbar