增加外链的方法: 
1.找您朋友的网站帮您加您网站的链接.单向链接对您网站效果最好.
2.在Google和Baidu查询您网站的主题.看看排名第一页的网站的反向链接.查询一个网站的反向链接查询方式:link:网站网址. 然后联系这些网站跟您交换链接.或出钱跟他们做单向链接.
3.查询已经被搜索收录的blog大站,每星期去开个blog并把您网站的的内容复制一条到blog里.复制内容到网站时一定要复制内容里有您网站主题关键字的内容.
4.如果您很能写.专门为一些大型网站供稿.让他们加上您网站的链接.一天两天.您在Google和Baidu搜索框输入您发表的标题.就可看到有N多网站转载您网站的内容.也就是所谓的写软文,这招最猛了.
5.去一些大型blog已经被搜索引擎收录的个人blog内容下面给他们评论.加上您网站链接.
6.如果您有不错的技术,且您网站全部是原创的话.把您的网站内容输出成RSS.提交他Google和Baidu新闻中心.会有上W IP引来您网站.也会被N多网站引用.
7.如果您也能写.另一个站长也能写.那您俩可以合作.他写的软文发表加您的链接.您写的软文也加他的链接.然后同时发表.不同内容都有你俩的链接.这可是一个双赢的好办法.
8.把网站提交给开放目录DMOZ(dmoz.org),DMOZ收录网站的时间较长,可能需要1个月甚至1年时间.但收录后效果非常明显.
9.现在好多大型站点都有网上收藏夹.比如Yahoo收藏夹.QQ书签,在Google和Baidu搜索网上收藏夹有N多.
10.现在流行ask爱问.Baidu知道等问答系统.在这些站点搜索您网站的关键字.回答相关的问题关留下您网站网址.
posted @ 2010-11-02 19:35 小马歌 阅读(175) | 评论 (0)编辑 收藏
 

腾讯爱百度,谷歌爱百度,搜狐爱新浪,奇虎360爱腾讯,并且两人有一段恋情,爱极生恨....

1、网易终于回了趟母校,当年的旧宿舍现在更旧了,穿过空无一人的走道,他点了支烟,透过烟雾的缭绕看清门牌上的号码。
1998年的时候,四个新生住进这里。
两年后新浪去了美国上市,搜狐也去了,网易想起那时的腾讯,白净,斯文,头发睡得乱蓬蓬从上铺探出头,细声细气托他帮忙捎瓶开水。

2、04年的时候腾讯去香港上市,百度到罗湖口岸送他。
两个人一路上都没有说旁的话,直到最后腾讯快要入闸了,百度才说:“我放弃了绿卡。”
腾讯哦了一声,心里不知道是高兴还是难过。
他不是没机会去美国上市,但偏选了香港,原本想,隔着整个太平洋,自己总会爱得少一些,他偏又回来了。

3、谷歌刚到香港的时候腾讯替他接风,到最后腾讯终于忍不住问:“你怎么不回硅谷?”
谷歌其实已经喝醉了,一双雏菊蓝色的眼睛没了焦点,大着舌头说不甚流利的中国话:“他说他最爱的城市是香港。”
腾讯心里颤了颤,谷歌还在絮絮的说酒话:“当不了他最爱的人,我就呆在他最爱的城市。”

4、百度问腾讯:“你凭什么做搜索引擎?!”
腾讯当时打了个哈哈,说不止搜索引擎其实除了腾讯SOSO啊我还做了微博,小新TA也很生气呢。
腾讯和百度都把新浪叫小新,其实三个人里,百度比他们俩都小两岁,年轻所以气盛吧。
腾讯在心里惆怅的想,我做了这么多,到底为什么,却永远不能说。

5、搜狐终于忍不住问,你为什么非要做搜索引擎和SOSO问问?大家都是同门师兄弟何必咄咄逼人就不放过百度?
腾讯一如往常漫不经心微笑,说你不会明白。当时搜狐只想搧腾讯一巴掌。
许多年后,当搜狐恨恨地COS新浪微博时,突然就明白过来,原来,爱一个人真的可以爱到盼他痛恨自己的地步。

6、“从前我问过你,如果有天我不再爱你了,你会怎么样?你当时只是闲闲地掸了掸烟灰,伸出手揉着我的头发说我是傻瓜。”奇虎360喃喃的说:“其实还有句话我一直没有说:如果有天你不再爱我了,我绝不会容许我自己出现在任何有你的地方。”

7、很多年前,奇虎360问:“如果有一天我和金山闹翻,你会不会帮我?”
当时腾讯并没有说话。奇虎做梦也没有想到,自己有一天竟然会跟腾讯闹翻。
TA永远记得腾讯说出的那句话:“我爱谁是我的隐私,与你无关。”
奇虎笑了笑,却在心里想,那么就掀开所有的隐私吧,看你到底在扫描什么。

8、当瑞星看到奇虎360终于跟腾讯翻脸的时候,几乎第一时间拿起电话,可是最终慢慢放下。
窗外是北京秋日的蓝天,像水晶一样清澈得不可思议。
他想起当年,自己公开宣布奇虎给用户装“后门”的时候,奇虎的眼神也像这天空一般。
“傻瓜!”他在心里冷笑,也不知道是在说自己,还是说奇虎。

9、 “投票你看了吗?”电话那端的腾讯或许笑了笑,马上又咳嗽起来。网易觉得心里发紧,腾讯却慢条斯理的说:“又不是选班长,有什么好看的。”网易想起当年选班长,不知为什么自己竟然全票当选,后来才知道是腾讯捣的鬼。“选上班长要请客呀。”他仍记得腾讯的手,轻轻拍在自己肩头。

10、腾讯站在窗前,意兴阑珊的俯瞰脚下如新笋般的楼宇。深圳的下午阳光永远这样明媚,在这个亚热带城市里,四季嬗递无痕,岁月光阴无声无息,一年又一年。一切又有什么意义?哪怕我把自己变成银行又怎么样?他连我的钱也不爱。

posted @ 2010-10-28 10:45 小马歌 阅读(311) | 评论 (0)编辑 收藏
 
解决方法:

如果你有Apache出现段错误是产生的core文件,最好对core文件作基本分析。如果你想让红帽支持帮忙分析数据,我们需要基础分析的输出,包括core文件本身和系统安装软件列表。以下是操作步骤:

1.列出/var/apache-dump/目录下的文件:

ls -l /var/apache-dump/
-rw-------    1 apache   apache   71188480 Aug 16 13:48 /var/apache-dump/core.1333

2.用gdb去分析Apache core文件。一直输入回车直到出现'(gdb)'提示符,输入"where"。将gdb的输出信息拷贝粘贴,发给红帽支持。输入"quit"退出。

# gdb /usr/sbin/httpd /var/apache-dump/core.902
GNU gdb Red Hat Linux (5.3.90-0.20030710.41.2.1rh)
Copyright 2003 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you
are welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB.  Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...(no debugging symbols
found)...Using host libthread_db library "/lib/libthread_db.so.1".
Core was generated by `/usr/sbin/httpd -DHAVE_ACCESS
-DHAVE_PROXY -DHAVE_AUTH_ANON -DHAVE_ACTIONS -DHA'.
Program terminated with signal 11, Segmentation fault.
Reading symbols from /lib/i686/libpthread.so.0...done.
Loaded symbols for /lib/i686/libpthread.so.0
Reading symbols from /lib/i686/libm.so.6...done.
Loaded symbols for /lib/i686/libm.so.6
...
Loaded symbols for /usr/lib/perl5/site_perl/5.6.1/i386-linux/auto/Unix/Syslog/Syslog.so
Reading symbols from /lib/libnss_nisplus.so.2...done.
Loaded symbols for /lib/libnss_nisplus.so.2
#0  0x4024aeb2 in semop (semid=131073, sops=0x8087870, nsops=1)
at ../sysdeps/unix/sysv/linux/semop.c:36
36      ../sysdeps/unix/sysv/linux/semop.c: No such file or directory.
in ../sysdeps/unix/sysv/linux/semop.c
(gdb) where
#0  0x4024aeb2 in semop (semid=131073, sops=0x8087870, nsops=1)
at ../sysdeps/unix/sysv/linux/semop.c:36
#1  0x0805ce37 in accept_mutex_on_sysvsem ()
#2  0x0805fc13 in child_main ()
#3  0x080602a9 in make_child ()
#4  0x0806034d in startup_children ()
#5  0x080609a0 in standalone_main ()
#6  0x080612a3 in main ()
(gdb) quit

3.我们推荐你运行命令:

rpm -qa > /var/apache-dump/rpm-listing-`date +%s`

得到一个在产生core文件时后,系统已安装的RPM包列表,用于作为更进一步分析。

posted @ 2010-10-15 11:10 小马歌 阅读(436) | 评论 (0)编辑 收藏
 

洛萨塔原色无暇女士内衣 3/4杯一片式无痕聚拢性感文胸RC8039

http://www.neiyibra.com/goodsinfo.php?sid=986&gid=7499480130

posted @ 2010-10-11 14:42 小马歌 阅读(212) | 评论 (0)编辑 收藏
 
一直以来很少看到有多少人使用php的socket模块来做一些事情,大概大家都把它定位在脚本语言的范畴内吧,但是其实php的socket模块可以做很多事情,包括做ftplist,http post提交,smtp提交,组包并进行特殊报文的交互(如smpp协议),whois查询。这些都是比较常见的查询。
特别是php的socket扩展库可以做的事情简直不会比c差多少。

预备知识:
php的socket连接函数
1、集成于内核的socket
这个系列的函数仅仅只能做主动连接无法实现端口监听相关的功能。而且在4.3.0之前所有socket连接只能工作在阻塞模式下。
此系列函数包括
fsockopen,pfsockopen
这两个函数的具体信息可以查询php.net的用户手册
他们均会返回一个资源编号对于这个资源可以使用几乎所有对文件操作的函数对其进行操作如fgets(),fwrite(), fclose()等单注意的是所有函数遵循这些函数面对网络信息流时的规律,例如:
fread() 从文件指针 handle 读取最多 length 个字节。 该函数在读取完 length 个字节数,或到达 EOF 的时候,或(对于网络流)当一个包可用时就会停止读取文件,视乎先碰到哪种情况。
可以看出对于网络流就必须注意取到的是一个完整的包就停止。
2、php扩展模块带有的socket功能。
php4.x 有这么一个模块extension=php_sockets.dll,RHT9上安装后也有一个extension=php_sockets.so的(这个依稀记得是有的需要确认一下,好久没有玩linux了)
当打开这个此模块以后就意味着php拥有了强大的socket功能,包括listen端口,阻塞及非阻塞模式的切换,multi-client 交互式处理等
这个系列的函数列表参看http://www.php.net/manual/en/ref.sockets.php
看过这个列表觉得是不是非常丰富呢?不过非常遗憾这个模块还非常年轻还有很多地方不成熟,相关的参考文档也非常少:(
我也正在研究中,因此暂时不具体讨论它,仅给大家一个参考文章
http://www.zend.com/pecl/tutorials/sockets.php


下面举例说明:
例子1
简单应用——whois查询
看一段代码

CODE:

<?php
$server="whois.verisign-grs.com";//TLD .com whois server
$data = "";
$domain = "abc.com";//serch domain
$fp = fsockopen($server,43);
if ($fp) {
fputs($fp,$domain."\r\n");
while (!feof($fp)) {
  $data .= fgets($fp,1000);
}
}
fclose($fp);
echo ln2br($data);
}

[Copy to clipboard]

这个应用因该非常常见了:),不用多废话了。

下面看看对于ftplist的应用

CODE:

<?php
$server="192.168.1.3";//服务器ip端口用默认的21举例而已所以不要那么复杂
$data = "";
$fp = fsockopen($server,21);//打开服务器
$data .= fread($fp,1024);//读取状态注意用的fread那么是一个可用报文结束为一段读取。

fwrite($fp,"USER hack\r\n");//登陆信息
$data .= fgets($fp,1024);//读取是否有此用户,是否等待密码

fwrite($fp,"PASS 123456\r\n");//密码
$data .= fgets($fp,1024);//是否验证成功

fwrite($fp,"REST 100\r\n");//重置数据流
$data .= fgets($fp,1024);

fwrite($fp,"PWD\r\n");//当前目录
$data .= fgets($fp,1024);

fwrite($fp,"TYPE A\r\n");//切换传输模式为A——ASCII模式
$data .= fgets($fp,1024);

fwrite($fp,"CWD ./123456\r\n");//更换目录为123456
$data .= fgets($fp,1024);

fwrite($fp,"PASV\r\n");//切换为被动模式
$tstring = fgets($fp,1024);
$data .=$tstring;
$ports=ftp_pasvs($tstring);//获取服务器分配的端口及ip

fwrite($fp,"LIST -al\r\n");//列表
$sock_data=ftp_data_connection($ports);//连接被动模式下的端口
while (!feof($sock_data)) {//循环获取数据
$data .= fgets($sock_data, 1024);
}
echo nl2br($data);

function ftp_pasvs($string)//用于获取被动模式下的相关连接信息
{
  $ip_port = preg_replace("/^(.+

\()([0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+)(\)?.*\r\n)$/i","\\2",$string);
  return $ip_port;
}

function ftp_data_connection($ip_port)//连接服务器数据端口
{
  $ip_port=trim($ip_port);
  if (!preg_match("/^[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]{1,3},[0-9]+,[0-9]+$/i", $ip_port)) {
    return "false";
  }
  $DATA = explode(",", $ip_port);
  $ipaddr = $DATA[0].".".$DATA[1].".".$DATA[2].".".$DATA[3];
  $port   = $DATA[4]*256 + $DATA[5];
  //echo $port."|".$ipaddr;//exit;
  $data_connection = @fsockopen($ipaddr, $port);
  if (!$data_connection) {
    return "false";
  }
  return $data_connection;
}
?>

[Copy to clipboard]

以上这段代码作了一下简单的注释应该比较清晰,现说明几点问题。
1、为什么采用fread:因为此函数是以网络包为截断的,使用这样的截断来获得信息可以很好的保持兼容性,因为对于ftpclient来讲服务器是一个未知的环境(wu-ftp,ser-u,g6ftp...),在这样的环境下有利于读取ftp的特征字符串以便以后使用。
2、为什么不用主动模式连接服务器传输数据:主动模式必须客户端指定端口然后进行传输,而php自带的函数并不具备此特性。除非使用扩展库,这样程序兼容性就会。。同时由服务器指定端口避免了客户端寻找合适端口造成的额外负担,尽管这样的负担微乎其微。
与这个代码类似的应用还有estmp发送邮件,管与此应用我不多说,有兴趣的朋友可以到我的blog上看看有相关代码(
www.freeplug.org)冰血老弟不介意我做点小广告吧哈哈。

POST,GET提交这个话题很老了:)我想不需要我在这里提起了文章很多。

在看下面一个例子前先提及一组函数pack,unpack。
任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外当然这组函数的用途不仅仅是组包。
下面简单的介绍一下:
应用一:
输入16进制或者2进制流。

CODE:

$src="3B06";
$binvar = pack('H*',$src);
echo $binvar;

[Copy to clipboard]

看看这个程序,相当于下面的程序

CODE:

echo chr(0x3B).chr(0x06);

[Copy to clipboard]

在数据量很小的时候后面的做法,更为简便。但是大量数据的时候,前一种做法则更为实际工整些,代码量也很少。

应用二:
网络数据流拆包

CODE:

$elength = str_len($bin);
extract(unpack("NLEN/Hcontent", $bin));

[Copy to clipboard]

将$bin拆成
一维数组并解开到变量$LEN和$content内。
下面看例子了
这个是利用php实现中国移动cmpp登陆消息的一个缩写例子

CODE:

<?php
define("LOGINID",0x00000001);//登陆消息
class SMS{
var $host;
var $mtport;
var $moport;
var $connectout;
var $sms_sock;
var $loginuser;
var $loginpass;
var $error_stop=0;
function SMS($host,$user,$pass,$mtport,$moport,$timeout=30,$if_conn=0){
  $this->host=$host;
  $this->mtport=$mtport;
  $this->moport=$moport;
  $this->loginuser=$user;
  $this->loginpass=$pass;
  $if_conn && $this->login();
}

function login(){
  $fp=@fsockopen($this->host,$this->mtport,$errno,$errstr,$this->connectout);
  if(!$fp){
    $this->sms_sock='';
    $this->halt("error in login num=$errno, msg=$errstr");
    return false;
  }else{
    //$this->sms_sock=$fp;
    $data=pack("Na10a32",LOGINID,$this->loginuser,md5($this->loginpass));//这个地方就是组包了
    $data=pack("N",strlen($data)+4).$data;//$data是实际内容前面这个表示整个报文长度
    if(fputs($fp,$data) !== false){
      //print_r(unpack("N",fread($fp,4)));//此处用于调试时检测用
      //print_r(unpack("N",fread($fp,4)));
      //print_r(unpack("c",fread($fp,4)));
      //print_r(unpack("N",fread($fp,4)));
      @fread($fp,12);
      $results=@fread($fp,4);
      if($results){
        $rs=@unpack("Ncounts",$results);//返回socket结果。
        $this->sms_sock=$fp;
      }else{
        $this->sms_sock='';
        $this->halt("error in login: loginid=$this->loginuser loginpass=$this->loginpass");
        return false;
      }
    }else{
      $this->sms_sock='';
      $this->halt("error in submit logininfo: loginid=$this->loginuser

loginpass=$this->loginpass");
      return false;
    }
  }
  return true;
}

function halt($msg){
  echo $msg;
  flush();
  $this->error_stop && exit;
}
}

[Copy to clipboard]

此例应用:主要用于底层的不依赖于http一类协议的通讯使用。在phpclass这个站点上有个smpp模块更为详细的演示了此类应用有兴趣的朋友可以看看。
末了,不多说。由于时间仓促,有些得不对的地方,望各位用pm通知我,我会及时更正,有什么疑问也可以pm我。

参考资料:
1、rfc 959 (ftp 协议)
2、RFC 3912 (WHOIS Protocol)
3、SMPP(SMPP Short Message Peer to Peer)
4、CMPP (China Mobile Peer to Peer)

posted @ 2010-09-16 17:02 小马歌 阅读(296) | 评论 (0)编辑 收藏
 
任何一款拥有socket操作能力的语言都有一个专门用于组包的函数,php也不例外!          

用了很久php了却很少有机会用php进行一些二进制操作。 最近用php写一个socket客户端连接一个用C++语言开发的游戏服务端。 服务器端开发人员使用了二进制的形式来定义协议的格式。协议格式如下:

包头(2bytes)+加密(1byte)+命令码(2bytes)+帧内容

1.包头的内容是记录帧内容的长度;
2. 加密:0表示不加密,1表示加密;
3. 命令码为服务端命令识别符号;

一开始不了解php原来有pack可以来组装二进制包, 走了弯路,让服务端开发人员用C语言帮忙开发了的几个内存操作函数,按照协议规则返回二进制包,然后我将这几个方法编译成一组扩展函数供php使用。

话归正题,本文是介绍如何使用pack和unpack这两个方法的。php官方手册举例太少,不能很容易理解,特别是那些格式化参数的使用。

转摘的参数中文说明:

pack/unpack 的摸板字符字符 含义
a 一个填充空的字节串
A 一个填充空格的字节串
b 一个位串,在每个字节里位的顺序都是升序
B 一个位串,在每个字节里位的顺序都是降序
c 一个有符号 char(8位整数)值
C 一个无符号 char(8位整数)值;关于 Unicode 参阅 U
d 本机格式的双精度浮点数
f 本机格式的单精度浮点数
h 一个十六进制串,低四位在前
H 一个十六进制串,高四位在前
i 一个有符号整数值,本机格式
I 一个无符号整数值,本机格式
l 一个有符号长整形,总是 32 位
L 一个无符号长整形,总是 32 位
n 一个 16位短整形,“网络”字节序(大头在前)
N 一个 32 位短整形,“网络”字节序(大头在前)
p 一个指向空结尾的字串的指针
P 一个指向定长字串的指针
q 一个有符号四倍(64位整数)值
Q 一个无符号四倍(64位整数)值
s 一个有符号短整数值,总是 16 位
S 一个无符号短整数值,总是 16 位,字节序跟机器芯片有关
u 一个无编码的字串
U 一个 Unicode 字符数字
v 一个“VAX”字节序(小头在前)的 16 位短整数
V 一个“VAX”字节序(小头在前)的 32 位短整数
w 一个 BER 压缩的整数
x 一个空字节(向前忽略一个字节)
X 备份一个字节
Z 一个空结束的(和空填充的)字节串
@ 用空字节填充绝对位置


string pack ( string $format [, mixed $args [, mixed $...]] )

一些规则:
1.每个字母后面都可以跟着一个数字,表示 count(计数),如果 count 是一个 * 表示剩下的所有东西。
2.如果你提供的参数比 $format 要求的少,pack 假设缺的都是空值。如果你提供的参数比 $format 要求的多,那么多余的参数被忽略。

下面还是用例子来说明用法会容易理解一点:

关于Pack:

下面的第一部分把数字值包装成字节:
$out = pack("CCCC", 65, 66, 67, 68);      # $out 等于"ABCD"
$out = pack("C4", 65, 66, 67, 68);         # 一样的东西

下面的对 Unicode 的循环字母做同样的事情:
$foo = pack("U4", 0x24b6, 0x24b7, 0x24b8, 0x24b9);

下面的做类似的事情,增加了一些空:
$out = pack("CCxxCC", 65, 66, 67, 68);      # $out 等于 "AB\0\0CD"

打包你的短整数并不意味着你就可移植了:
$out = pack("s2", 1, 2);        
# 在小头在前的机器上是 "\1\0\2\0"
# 在大头在前的机器上是 "\0\1\0\2"

在二进制和十六进制包装上,count 指的是位或者半字节的数量,而不是生成的字节数量:
$out = pack("B32", "...");
$out = pack("H8", "5065726c");         # 都生成“Perl”

a 域里的长度只应用于一个字串:
$out = pack("a4", "abcd", "x", "y", "z");      # "abcd"

要绕开这个限制,使用多倍声明:
$out = pack("aaaa",    "abcd", "x", "y", "z");   # "axyz"
$out = pack("a" x 4,   "abcd", "x", "y", "z");   # "axyz"

a 格式做空填充:
$out = pack("a14", "abcdefg");         # " abcdefg\0\0\0\0\0\0"


关于unpack:

array unpack ( string $format, string $data )

$data = "010000020007";
unpack("Sint1/Cchar1/Sint2/Cchar2",$data);

## array('int1'=&gt;1, 'char1'=&gt;'0','int2'=&gt;2,'char2'=&gt;7);

最后本文开头讲到的协议使用pack/unpack 举例程序代码为 :

$lastact   = pack('SCSa32a32',0x0040, 0x00, 0x0006, $username, $passwd );

unpack('Sint1/Cchar1/Sint2/Cchar2/',$lastmessage);
posted @ 2010-09-16 17:01 小马歌 阅读(282) | 评论 (0)编辑 收藏
 
from:http://www.chedong.com/tech/awstats.html

你完全不必耐心看完所有内容:简要安装说明如下
安装
http://sourceforge.net/projects/awstats/ 下载安装包后:
GNU/Linux:tar zxf awstats-version.tgz
awstats的脚本和静态文件缺省都在wwwroot目录下:将cgi-bin目录下的文件都部署到 cgi-bin/目录下:/home/apache/cgi-bin/awstats/
mv awstats-version/wwwroot/cgi-bin /path/to/apache/cgi-bin/awstats
把图标等文件目录复制到WEB的HTML文件发布目录下,例如:/home/apache/htdocs/ 下发布
更多的批量更新脚本等在tools 目录下,可以一并放到cgi-bin/awstats/ 目录下
升级国内主要搜索引擎和蜘蛛定义,安装GeoIP的应用库:C
http://www.maxmind.com/download/geoip/api/c/ 解包,编译安装
perl -MCPAN -e 'install "Geo::IP"' 或者使用纯Perl包  perl -MCPAN -e 'install "Geo::IP::PurePerl"'
下载GeoIP/GeoIPCityLite包:解包并部署到awstats目录下:

wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

配置
将缺省awstats.model.conf 命名成common.conf
修改其中的一些配置选项:
LoadPlugin="decodeutfkeys"
LoadPlugin="geoip GEOIP_STANDARD /home/apache/chedong.com/cgi-bin/awstats/GeoIP.dat"
LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /home/apache/chedong.com/cgi-bin/awstats/GeoLiteCity.dat"

创建awstats下创建:data 目录用于统计数据输出,缺省的统计输出是按月汇总的;对于日志非常大的最好选择按天统计输出,并修改awstats.pl: 设置LIMITFLUSH加10倍
$LIMITFLUSH =
  50000;   # Nb of records in data arrays after how we need to flush data on disk
可以有效提高统计的速度(减少磁盘IO),并避免按月汇总数据导致的统计文件过大;

按照一下样例设置配置文件:
Include "common.conf"
LogFile="/home/apache/logs/access_log.%YYYY-24%MM-24%DD-24"
SiteDomain="www.chedong.com"
HostAliases="chedong.com"
DefaultFile="index.html"
DirData="/home/apache/cgi-bin/awstats/data/"

内容摘要:AWStats的使用简介和配置一些改进说明。很高兴看到在AWStats 6.3版本开始:中文用户基本上已经只需要将配置文件中将 LoadPlugin="decodeutfkeys" 启用基本上就没有什么中文搜索引擎的统计问题了,目前增加了多个国内主要搜索引擎厂商。包含了针对国内主要搜索引擎和蜘蛛定义的补丁(解包后覆盖lib\目录下的原程序目录即可),其中也包含了本站的样例配置文件

日志统计系统在站点的用户行为分析中扮演了重要的角色,尤其是对于来自搜索引擎的关键词 访问统计:是很有效的用户行为分析数据来源。随着互联网多年的发展,WEB日志统计工具已经越来越成熟,功能也越来越丰富。其中有很多是开放源代码的, AWStats就是其中非常优秀的一款。

AWStats: Advanced Web Statistics

AWStats是在Sourceforge上发展很快的一个基于Perl的WEB日志分析工具。相对于另外一个非常优秀的开放源代码的日志分析工具Webalizer,AWStats的优势在于:

  1. 界面友好:可以根据浏览器直接调用相应语言界面(有简体中文版)
    参考输出样例:http://www.chedong.com/cgi-bin/awstats/awstats.pl?config=chedong
  2. 基于Perl:并且很好的解决了跨平台问题,系统本身可以运行在GNU/Linux上或Windows上(安装了ActivePerl后);分析的日志直接支持Apache格式 (combined)和IIS格式(需要修改)。Webalizer虽然也有Windows平台版,但目前已经缺乏 维护;
    AWStats完全可以实现用一套系统完成对自身站点不同WEB服务器:GNU/Linux/Apache和Windows/IIS服务器的统一统计。
  3. 效率比较高:AWStats输出统计项目比Webalizer丰富了很多,速度仍可以达到Webalizer的1/3左右,对于一个日访问量 百万级的站点,这个速度都是足够的;
  4. 配置/定制方便:系统提供了足够灵活但缺省也很合理的配置规则,需要修改的缺省配置不超过3,4项就可以开始运行,而且修改和扩展的插件还是 比较多的;
  5. AWStats的设计者是面向精确的"Human visits"设计的,因此很多搜索引擎的机器人访问都被过滤掉了,因此有可能比其他日志统计工具统计的数字要低,来自公司内部的访问也可以通过IP过滤 设置过滤掉。
  6. 提供了很多扩展的参数统计功能:使用ExtraXXXX系列配置生成针对具体应用的参数分析会对产品分析非常有用。

更多与其他工具:Webalizer, analog的比较请参考:
http://awstats.sourceforge.net/#COMPARISON

AWStats安装备忘

AWStats的运行模式是这样的:

  1. 分析日志:运行后将这样的日志统计结果归档到一个AWStats的数据库(纯文本)里;
  2. 然后是输出:分两种形式
      • 一种是通过cgi程序读取统计结果数据库输出;
      • 一种是运行后台脚本将输出导出成静态文件;

      以下是2个针对单个站点日志统计例子:
      一个是在GNU/Linux上通过CGI方式的输出,
      一个是在Windows 2000上的基于静态页面的导出

      下载/安装

      http://sourceforge.net/projects/awstats/ 下载安装包后:

      GNU/Linux:tar zxf awstats-version.tgz
      awstats的脚本和静态文件缺省都在wwwroot目录下: 将cgi-bin目录下的文件都部署awstats.pl程序到/home/apache/cgi-bin/awstats/ 下
      mv awstats-version/wwwroot/cgi-bin /path/to/apache/cgi-bin/awstats
      #把图标等文件目录复制到WEB的HTML文件发布目录下:/home/apache/htdocs/ 下发布
      更多的批量更新脚本等在tools 目录下,可以一并放到cgi-bin/awstats/ 目录下,

      Windows 2000:按照后台脚本模式运行,直接解包,然后移动到D:\AWStats目录下
      把图标icon目录复制到IIS的发布目录下:inetpub/icon

      数据源日志格式和按天的截断规则

      1. 对于Apache:日志格式好设置:设置成combined格式即可,日志截断麻烦一点:需要安装cronolog工具,将日志设置成按天截断:
        CustomLog "|/usr/local/sbin/cronolog /path/to/apache/logs/access_log.%Y%m%d" combined
        比如:logs/access_log.20030326
        日志是压缩格式,可以使用gzip -d < /home/apache/logs/access_log.%YYYY-24%MM-24%DD-24.gz | 动态解压缩统计。
      2. 对于IIS:缺省有比较好的日志按天截断规则,但是IIS的日志格式比较不适合AWStats统计,
        因此最好直接去掉所有日志字段,然后严格按照以下列表设置
        • 日期 date
        • 时间 time
        • 客户IP地址 c-ip
        • 用户名 cs-username
        • 方法 cs-method
        • URI资源 cs-uri-stem
        • 协议状态 sc-status
        • 发送字节数 sc-bytes
        • 协议版本 cs-version
        • 用户代理 cs(User-Agent)
        • 参照 cs(Referer)
        相比IIS缺省设置:
        减少的有:
        • 服务器IP地址
        • 服务器端口
        • URI查询
        增加的有:
        • 发送字节数
        • 协议版本
        • 参照 

      配置文件的命名规则:awstats.sitename.conf

      AWStats的主程序awstats.pl会自动根据站点名调用相应站点的配置文件:awstats.sitename.conf
      比如:运行./awstats.pl -config=chedong 调用的就是同目录下的 awstats.chedong.conf 配置文件;
      如果没有指定-config,还会找当前目录下的awstats.conf或者/etc/awstats.conf作为缺省配置文件。
      所以最好把缺省的awstats.model.conf 重命名成 awstats.yoursite.conf;比如:awstats.chedong.conf,

      对于多个站点的统计,AWStats的配置文件包含功能还是非常有用的,我们可以把通用的配置放在一个文档中,然后用(5.4版本以后开始支持) Include配置将通用配置包含在各个具体配置文件的头部,然后用其他配置覆盖通用配置中的相应属性,比如:
      Include="common.conf"
      LogFile="/path/to/bbs/access_log"
      SiteName="bbs.chedong.com"

      最少的配置文件修改:LogFile SiteDomain LogFormat

      对于在GNU/Linux上统计Apache日志只需修改:LogFile SiteDomain这2个选项

      1. GNU/Linux LogFile="/path/to/apache/logs/access_log.%YYYY-24%MM-24%DD-24"
        Windows 2000 LogFile="d:\iis_logs\W3SV3\ex%YY-24%MM-24%DD-24.log"
        这个配置的意思是用24小时前的年份,月份,日期拼出的日志文件名;
      2. SiteDomain="www.chedong.com"
        站点的名称,缺省是空的,如果为空,AWStats将拒绝运行;
      3. 对于统计IIS日志需要多修改一个:
        LogFormat=2
        缺省值是1:Apache日志,2是IIS日志

      其他需要注意的事项:
      AWStats缺省不过滤swf文件,会把.swf算成PageView,所以如果站点上swf文件主要是广告的话最好还是要过滤掉:

      日志分析

      ./awstats.pl -update -config=sitename -lang=cn
      比如:./awstats.pl -update -config=chedong
      会自动调用awstats.chedong.conf这个配置文件

      统计输出

      GNU/Linux    http://localhost/cgi-bin/awstats/awstats.pl?config=chedong
      Windows 2000 http://localhost/awstats/awstats.chedong.html

      日志统计自动运行

      GNU/Linux上:crontab -e: 每天8点10分运行
      #update awstats
      10 8 * * * (cd /path/to/apache/cgi-bin/awstats/; ./awstats.pl -update -config=chedong)

      Windows 2000上:设置每天8点10分运行
      D:\Perl\bin\perl.exe d:\AWStats\tools\awstats_buildstaticpages.pl -update -config=chedong -lang=cn -dir=c:\inetpub\awstats\ -awstatsprog=d:\awstats\wwwroot\cgi-bin\awstats.pl

      多站点日志统计

      AWStats自带了一个批处理工具:tools/awstats_updateall.pl,可以批量地遍历一个目录下所有地配置文件并运行统 计。因此剩下的工作就主要是日志的同步问题了。

      针对多个站点,很多配置选项是重复的,如果每个配置文件都修改维护起来会很麻烦,AWStats从5.4版本开始提供了配置文件包含的功能,所以我们可 以配置一个通用配置,比如:common.conf

      然后其他站点的配置设置为:可以通过后面的选项覆盖和缺省不一致的配置。
      awstats.bbs.chedong.conf
      Include "chedong.common.conf"
      LogFile "/path/to/bbs_log"
      SiteName "bbs.chedong.com"

      awstats.www.chedong.conf
      Include "chedong.common.conf"
      LogFile "/path/to/www_log"
      SiteName "www.chedong.com"
      HostAliases="chedong.com" 

      统计指标说明

      • 参观者:按来访者不重复的IP统计,一个IP代表一个参观者;
      • 参观次数:一个参观者可能1天之内参观多次(比如:上午一次,下午一次),所以按一定时间内(比如:1个小时),不重复的IP数统计,参观者 的访问次数;
      • 网页数:不包括图片,CSS, JavaScript文件等的纯页面访问总数,但如果一个页面使用了多个帧,每个帧都算一个页面请求;
      • 文件数:来自浏览器客户端的文件请求总数,包括图片,CSS,JavaScript等,用户请求一个页面是,如果页面中包含图片等,所以对服 务器会发出多次文件请求,文件数一般远远大于文件数;
      • 字节:传给客户端的数据总流量;
      • 来自REFERER中的数据:日志中的参考(REFERER)字段,记录了访问相应网页之前地址,因此如果用户是通过搜索引擎的搜索结果点击 进入网站的,日志中就会有用户在相应搜索引擎的查询地址,这个地址中就可以通过解析将用户查询使用的关键词提取出来:
        比如:
        2003-03-26 15:43:58 123.123.123.123 - GET /index.html 200 192 HTTP/1.1 Mozilla/4.0+(compatible;+MSIE+5.01;+Windows+NT+5.0) http://www.google.com/search?q=chedong
        AWStats在搜索引擎的关键短语和关键词统计方面的功能还是比较完整的:可以对全世界3百多种机器爬虫进行识别,并且可以识别大部分主流国际化搜索引擎和很多地区的本地语言搜索引擎。

      Hacking AWStats

      基于地理信息的插件安装:

      GeoIP 和 Geo::IPfree(awstats 5.5+)
      GeoIP和Geo::IPfree都免费的是国家/IP的影射表,比通过DNS反相解析域名得到的统计准确,而且速度快。GeoIP的API都是免费 的,缺省库是免 费的,收费的是它的数据更新服务。Geo::IPfree不仅代码是公开的,而且库数据也是公开的。

      GeoIP安装:
      先下载C库:GeoIP C解包后
      %./configure; make
      #make install

      然后下载Perl库:GeoIP Perl解包后
      %perl MakeFile.PL; make
      #make install

      Geo::IPfree安装:
      下载Geo::IPfree解 包后
      %perl Makefile
      %make
      #make install

      配置:通过在配置文件中启用GEOIP相关插件:

      LoadPlugin="geoip GEOIP_STANDARD /home/apache/chedong.com/cgi-bin/awstats/GeoIP.dat"
      LoadPlugin="geoip_city_maxmind GEOIP_STANDARD /home/apache/chedong.com/cgi-bin/awstats/GeoLiteCity.dat"

      MaxMind目前免费提供了GeoIP和GeoIPCityLite数据包:可以定期每个月从以下地址下载:

      wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
      wget  http://geolite.maxmind.com/download/geoip/database/GeoLiteCountry/GeoIP.dat.gz

      从最近的统计来看一般为每月3日更新,此外:http://geolite.maxmind.com/download/geoip/database/下也有CSV源文件提供;此外:利用QQ的纯真库也能获得更详细的地理信息分布统计

      参考资料:
      posted @ 2010-09-04 17:20 小马歌 阅读(333) | 评论 (0)编辑 收藏
       
      1、事先安装好Apache

        2、安装awstats的命令(将awstats安装在/opt/awstats目录)

        mkdir -p /var/lib/awstats

        cd /opt

        wget http://www.awstats.cn/files/awstats-6.6.tar.gz

        tar zxvf awstats-6.6.tar.gz

        mv awstats-6.6 awstats

        cd awstats/tools/

        perl awstats_configure.pl

        3、Perl脚本awstats_configure.pl安装过程(以下内容引用AWStats英文使用说明)

        (1)

        -----> Running OS detected: Linux, BSD or Unix

        Warning: AWStats standard directory on Linux OS is '/usr/local/awstats'.

        If you want to use standard directory, you should first move all content

        of AWStats distribution from current directory:

        /opt/awstats

        to standard directory:

        /usr/local/awstats

        And then, run configure.pl from this location.

        Do you want to continue setup from this NON standard directory [yN] ?

        这时选择y回车。

        (2)

        -----> 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):

        第一次使用请输入Apache的httpd.conf路径,例如/opt/sina/apache/conf/httpd.conf

        以后如果再使用perl awstats_configure.pl生成配置文件,则可以输入none跳过。

        (3)

        -----> Check and complete web server config file '/opt/sina/apache/conf/httpd.conf'

        Warning: You Apache config file contains directives to write 'common' log files

        This means that some features can't work (os, browsers and keywords detection).

        Do you want me to setup Apache to write 'combined' log files [y/N] ?

        选择y,将日志记录方式由CustomLog /yourlogpath/yourlogfile common改为更详细的CustomLog /yourlogpath/yourlogfile combined

        (4)

        -----> Update model config file '/opt/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

        (5)

        -----> 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:

        >

        输入站点名称,例如sina

        (6)

        -----> Define config file path

        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):

        >

        输入AWStats配置文件存放路径,一般直接回车则使用默认路径/etc/awstats

        (7)

        -----> 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:

        /opt/awstats/wwwroot/cgi-bin/awstats.pl -update -config=sina

        Or if you have several config files and prefer having only one command:

        /opt/awstats/tools/awstats_updateall.pl now

        Press ENTER to continue...

        按回车键继续

        (8)

        A SIMPLE config file has been created: /opt/awstats/etc/awstats.sina.conf

        You should have a look inside to check and change manually main parameters.

        You can then manually update your statistics for 'sina' with command:

        > perl awstats.pl -update -config=sina

        You can also read your statistics for 'sina' with URL:

        > http://localhost/awstats/awstats.pl?config=sina

        Press ENTER to finish...

        按回车键结束

        4、修改awstats.sina.conf配置

        vi /etc/awstats/awstats.sina.conf

        按?,在之后输入要搜索的内容LogFile="

        然后按Ins键,找到LogFile="/var/log/httpd/access_log"

        改为要分析的Apache日志路径与文件名。

        (1)多日志合并分析(例:新浪播客其中两台服务器2月6日的日志30.0206.vblog.log与31.0206.vblog.log)

        LogFile="/opt/awstats/tools/logresolvemerge.pl /var/apachelogs/30.0206.vblog.log /var/apachelogs/31.0206.vblog.log|"

        或

        LogFile="/opt/awstats/tools/logresolvemerge.pl /var/apachelogs/*.0206.vblog.log|"

        (2)分析使用gzip压缩过的日志文件

        LogFile="gzip -d

        5、更新分析报告

        perl /opt/awstats/wwwroot/cgi-bin/awstats.pl -config=sina -update

        如果出现以下错误提示,很大可能是Apache的Log文件中存在以前CustomLog /yourlogpath/yourlogfile common生成的日志,删除掉这些行的日志即可:

        This means each line in your web server log file need to have "combined log format" like this:

        111.22.33.44 - - [10/Jan/2001:02:14:14 +0200] "GET / HTTP/1.1" 200 1234 "http://www.fromserver.com/from.htm" "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)"

        6、查看分析报告

        http://localhost/awstats/awstats.pl?config=sina

        这里的sina对应/etc/awstats/awstats.sina.conf中的sina

        附:

        (1)参考资料:AWStats logfile analyzer 6.6 Documentation -- AWStats Installation, Configuration and Reporting (http://www.awstats.cn/docs/awstats_setup.html)

        (2)测试环境:在DELL PowerEdge 2950服务器+CentOS 4.4 Linux操作系统+Apache 2.0.59下测试通过。



      下载地址:http://awstats.sourceforge.net/#DOWNLOAD
      posted @ 2010-09-02 21:02 小马歌 阅读(400) | 评论 (0)编辑 收藏
       

      rewrite标志

      R[=code](force redirect) 强制外部重定向 (rkyW z
      强制在替代字符串加上http://thishost[:thisport]/前缀重定向到外部的URL.如果code不指定,将用缺省的302 HTTP状态码。 gN24M 3{C
      F(force URL to be forbidden)禁用URL,返回403HTTP状态码。 m> 4ahue$
      G(force URL to be gone) 强制URL为GONE,返回410HTTP状态码。 Np'2 }6P
      P(force proxy) 强制使用代理转发。 ) Ps b>'X
      L(last rule) 表明当前规则是最后一条规则,停止分析以后规则的重写。 ua 5 O Gx
      N(next round) 重新从第一条规则开始运行重写过程。 S,<EEt XQ
      C(chained with next rule) 与下一条规则关联 @+ 9 < O0
      如果规则匹配则正常处理,该标志无效,如果不匹配,那么下面所有关联的规则都跳过。 Zs}5Smjl;%
      T=MIME-type(force MIME type) 强制MIME类型 ~=KJ zOS,S
      NS (used only if no internal sub-request) 只用于不是内部子请求 /[6j)HIS
      NC(no case) 不区分大小写 ^2$ l J
      QSA(query string append) 追加请求字符串 zH>hx5,k'X
      NE(no URI escaping of output) 不在输出转义特殊字符 \~ B D m
      例如:RewriteRule /foo/(.*) /bar?arg=P1\%3d$1 [R,NE] 将能正确的将/foo/zoo转换成/bar?arg=P1=zed +3a?` Z
      PT(pass through to next handler) 传递给下一个处理 %0 #XPc("
      例如: :5/Uh/ sX
      RewriteRule ^/abc(.*) /def$1 [PT] # 将会交给/def规则处理 x A u/
      Alias /def /ghi XyM G.r-,
      S=num(skip next rule(s)) 跳过num条规则 A~Xq,BxCV
      E=VAR:VAL(set environment variable) 设置环境变量

      rewrite时服务器变量: `: O\dN>ON
      HTTP headers:HTTP_USER_AGENT, HTTP_REFERER, HTTP_COOKIE, HTTP_HOST, HTTP_ACCEPT },5'z {3E
      connection & request: REMOTE_ADDR, QUERY_STRING PY3 ps2^K.
      server internals: DOCUMENT_ROOT, SERVER_PORT, SERVER_PROTOCOL r}u %#G+K,
      system stuff: TIME_YEAR, TIME_MON, TIME_DAY

      Rewrite规则表达式的说明: #Fu>|2 F|
      . 匹配任何单字符 wFlv i =n/
      [chars] 匹配字符串:chars [o c~iDx%W
      [^chars] 不匹配字符串:chars Lc<eRVNd,
      text1|text2 可选择的字符串:text1或text2 { OT:3SS7
      ? 匹配0到1个字符 A%Z)w z{
      * 匹配0到多个字符 v4 *rPG v
      + 匹配1到多个字符 " o c $
      ^ 字符串开始标志 SKXBrD=-
      $ 字符串结束标志 &LQ%
      \n 转义符标志

      反向引用 $N 用于 RewriteRule 中匹配的变量调用(0 <= N <= 9) =_=*O EgO]
      反向引用 %N 用于 RewriteCond 中最后一个匹配的变量调用(1 <= N <= 9)

      RewriteCond标志符 @J v# f r
      'nocase|NC'(no case)忽略大小 ZCi Y,;c
      'ornext|OR' (or next condition)逻辑或,可以同时匹配多个RewriteCond条件

      RewriteRule适用的标志符 hLuJ WjCV
      'redirect|R [=code]' (force redirect)强迫重写为基于http开头的外部转向(注意URL的变化) 如:[R=301,L] uC[d%v`
      'forbidden|F' (force URL to be forbidden)重写为禁止访问 2F T-}w 0;
      'proxy|P' (force proxy)重写为通过代理访问的http路径 F(0Z ] # +
      'last|L' (last rule)最后的重写规则标志,如果匹配,不再执行以后的规则 ?%;B`2 nDR
      'next|N' (next round)循环同一个规则,直到不能满足匹配 ,4yG(O $ )
      'chain|C' (chained with next rule)如果匹配该规则,则继续下面的有Chain标志的规则。 p_gA/ . v=
      'type|T=MIME-type' (force MIME type)指定MIME类型 1^tSn #j
      'nosubreq|NS' (used only if no internal sub-request)如果是内部子请求则跳过 LhZZ c`|7t
      'nocase|NC' (no case)忽略大小 b.@ H1 L
      'qsappend|QSA' (query string append)附加查询字符串 *b: u * `@
      'noescape|NE' (no URI escaping of output)禁止URL中的字符自动转义成%[0-9]+的形式。 ~ t"n%SgY
      'passthrough|PT' (pass through to next handler)将重写结果运用于mod_alias IL2 e6 b
      'skip|S=num' (skip next rule(s))跳过下面几个规则 loR,X W7 z
      'env|E=VAR:VAL' (set environment variable)添加环境变量

      实际操作

      例子: "IOC[ #&G
      RewriteEngine on !?S5IG LOj
      RewriteCond %{HTTP_USER_AGENT} ^MSIE [NC,OR] _R N/7\
      RewriteCond %{HTTP_USER_AGENT} ^Opera [NC] !&' # a
      RewriteRule ^.* - [F,L] 这里”-”表示没有替换,浏览器为IE和Opera的访客将被禁止访问。

      例子: *U( 1iv0 n
      RewriteEngine On QWU5-p9e 8
      RewriteBase /test Q3 K ;kS
      RewriteCond %{REQUEST_FILENAME}.php -f rU/-Wq` B
      RewriteRule ([^/]+)$ /test/$1.php ?7r mw y\
      #for example: /test/admin => /test/admin.php I v 80,hW
      RewriteRule ([^/]+)\.html$ /test/$1.php [L] aufcd57
      #for example: /test/admin.html => /test/admin.php

      限制目录只能显示图片 yKX: Z4I/
      < IfModule mod_rewrite.c> + #i ,87
      RewriteEngine on L @ ^ !(
      RewriteCond %{REQUEST_FILENAME} !^.*\.(gif|jpg|jpeg|png|swf)$ mtHi9).,y|
      RewriteRule .*$ - [F,L] [ 3bwbfHhi
      < /IfModule>

      一 打开 Apache 的配置文件 httpd.conf 。
      二 将#LoadModule rewrite_module modules/mod_rewrite前面的#去掉
      三 在 httpd.conf中添加:
      <IfModule mod_rewrite.c>
          RewriteEngine On
          #RewriteCond %{ENV:SCRIPT_URL} (?:index|dispbbs)[-0-9]+\.html
          RewriteRule ^(.*?(?:index|dispbbs))-([-0-9]+)\.html$ $1.php?__is_apache_rewrite=1&__rewrite_arg=$2
      </IfModule>

      四 要实现asp帖子URL到php帖子的映射,在 第三步的<IfModule mod_rewrite.c>和</IfModule>之间添加:
          RewriteMap tolowercase int:tolower
          RewriteCond %{QUERY_STRING} (?:boardid|page|id|replyid|star|skin)\=\d+ [NC]
          RewriteRule ^(.*(?:index|dispbbs))\.asp$ $1.php?${tolowercase:%{QUERY_STRING}}&__is_apache_rewrite=1

      五 保存httpd.conf并重启Apache。

      posted @ 2010-08-31 10:47 小马歌 阅读(378) | 评论 (0)编辑 收藏
       
      选择prefork还是worker能在编译时使用?with-mpm=MPM参数指定,默认为prefork,
      prefork
      prefork采用预派生子进程方式,用独立的子进程来处理 不同的请求,进程之间彼此独立。在make编译和make install安装后,使用httpd -l来确定当前使用的MPM是prefork.c。查看httpd-mpm.conf设置文件,里面包含如下默认的设置段:
      StartServers 5
      MinSpareServers 5
      MaxSpareServers 10
      MaxClients 150
      MaxRequestsPerChild 0
      prefork 控制进程在最初建立“StartServers”个子进程后,为了满足MinSpareServers设置的需要创建一个进程,等待一秒钟,继续创建两个,再等待一秒钟,继续创建四个……如此按指数级增加创建的进程数,最多达到每秒32个,直到满足MinSpareServers设置的值为止。这种模式能不必在请求到来时再产生新的进程,从而减小了系统开销以增加性能。MaxSpareServers设置了最大的空闲进程数,如果空闲进程数大于这个值,Apache会自动kill掉一些多余进程。这个值不要设得过大,但如果设的值比MinSpareServers小,Apache会自动把其调整为 MinSpareServers+1。如果站点负载较大,可考虑同时加大MinSpareServers和MaxSpareServers。 MaxRequestsPerChild设置的是每个子进程可处理的请求数。每个子进程在处理了“MaxRequestsPerChild”个请求后将自动销毁。0意味着无限,即子进程永不销毁。虽然缺省设为0能使每个子进程处理更多的请求,但如果设成非零值也有两点重要的好处:1、可防止意外的内存泄漏。2、在服务器负载下降的时侯会自动减少子进程数。因此,可根据服务器的负载来调整这个值。MaxClients是这些指令中最为重要的一个,设定的是 Apache能同时处理的请求,是对Apache性能影响最大的参数。其缺省值150是远远不够的,如果请求总数已达到这个值(可通过ps -ef|grep http|wc -l来确认),那么后面的请求就要排队,直到某个已处理请求完毕。这就是系统资源还剩下非常多而HTTP访问却非常慢的主要原因。虽然理论上这个值越大,能处理的请求就越多,但Apache默认的限制不能大于256。ServerLimit指令无须重编译Apache就能加大MaxClients。
      ServerLimit  10000
      StartServers 5
      MinSpareServers 5
      MaxSpareServers 10
      MaxClients 10000
      MaxRequestsPerChild 0


      Worker
      相对于prefork,worker全新的支持多线程和多进程混合模型的MPM。由于使用线程来处理,所以能处理相对海量的请求,而系统资源的开销要小于基于进程的服务器。不过,worker也使用了多进程,每个进程又生成多个线程,以获得基于进程服务器的稳定性。在configure ?with-mpm=worker后,进行make编译、make install安装。在缺省生成的httpd-mpm.conf中有以下默认设置段:

      StartServers 2
      MaxClients 150
      MinSpareThreads 25
      MaxSpareThreads 75
      ThreadsPerChild 25
      MaxRequestsPerChild 0

      Worker 由主控制进程生成“StartServers”个子进程,每个子进程中包含固定的ThreadsPerChild线程数,各个线程独立地处理请求。同样,为了不在请求到来时再生成线程,MinSpareThreads和MaxSpareThreads设置了最少和最多的空闲线程数;而MaxClients 设置了同时连入的clients最大总数。如果现有子进程中的线程总数不能满足负载,控制进程将派生新的子进程。MinSpareThreads和 MaxSpareThreads的最大缺省值分别是75和250。这两个参数对Apache的性能影响并不大,能按照实际情况相应调节。 ThreadsPerChild是worker MPM中和性能相关最密切的指令。ThreadsPerChild的最大缺省值是64,如果负载较大,64也是不够的。这时要显式使用 ThreadLimit指令,他的最大缺省值是20000。Worker模式下所能同时处理的请求总数是由子进程总数乘以ThreadsPerChild 值决定的,应该大于等于MaxClients。如果负载非常大,现有的子进程数不能满足时,控制进程会派生新的子进程。默认最大的子进程总数是16,加大时也需要显式声明ServerLimit(最大值是20000)。需要注意的是,如果显式声明了ServerLimit,那么他乘以 ThreadsPerChild的值必须大于等于MaxClients,而且MaxClients必须是ThreadsPerChild的整数倍,否则 Apache将会自动调节到一个相应值。
      ServerLimit 25
      ThreadLimit 200
      StartServers 3
      MaxClients 2000
      MinSpareThreads 50
      MaxSpareThreads 200
      ThreadsPerChild 100
      MaxRequestsPerChild 0
      下面是利用Apache自带的测试工具ab对Server进行测试的情况(设定请求的index页面为6bytes),cpu%为cpu占用率,mem为内存使用量(M为单位),RequestsPerSecond为每秒处理的请求数。
      1、Prefor方式
        (ServerLimit,StartServer,MinSpareServers,MaxSpareServers,MaxClients,MaxRequestPerChild)            

      -n/-c(ab参数)
      Cpu%
      Mem
      Requestspersecond
      (-,5,5,10,150,0)
      100000/100
      28.8
      285
      8434
      100000/200
      29.2
      304
      8032
      100000/500
      25.3
      323
      7348
      100000/1000
      24.4
      330
      5886
      (10000,5,5,10,500,0)
      100000/100
      28.7
      371
      8345
      100000/200
      27.4
      389
      7929
      100000/500
      24.9
      417
      7229
      100000/1000
      23.4
      437
      6676
      (10000,5,5,10,1000,0)
      100000/100
      28.8
      408
      8517
      100000/200
      27.0
      422
      8045
      100000/500
      24.2
      455
      7236
      100000/1000
      22.5
      470
      6570
      (10000,5,5,10,1500,0)
      100000/100
      29.6
      330
      8407
      100000/200
      28.1
      349
      8014
      100000/500
      26.4
      380
      7290
      100000/1000
      24.0
      400
      6686
      2、Worker方式
      (ServerLimt,Threadlimt,Startservers,MaxClients,MinspareThread,MaxspareThread,ThreadperChild,MaxRequestPerChild)
                        

      -n/-c(ab参数)
      cpu%
      mem
      RequestsperSecond
      (50,500,5,10000,50,200,200,0)
      100000/100
      18.6
      188
      6020
      100000/200
      20.1
      195
      5892
      100000/500
      19.8
      209
      5708
      100000/1000
      22.2
      218
      6081
      (100,500,5,10000,50,200,100,0)
      100000/100
      24.5
      240
      6919
      100000/200
      23.6
      247
      6798
      100000/500
      24.6
      254
      6827
      100000/1000
      22.3
      271
      6114
      (200,500,5,10000,50,200,50,0)
      100000/100
      27.3
      301
      7781
      100000/200
      27.4
      307
      7789
      100000/500
      26.0
      320
      7141
      100000/1000
      21.8
      344
      6110
      相对来说,prefork方式速度要稍高于worker,然而他需要的cpu和memory资源也稍多于woker。
      posted @ 2010-08-23 21:25 小马歌 阅读(179) | 评论 (0)编辑 收藏
      仅列出标题
      共95页: First 上一页 58 59 60 61 62 63 64 65 66 下一页 Last