樂思蜀的博客,包括但不限于SEO&SEM研究、应用中的心得体会,互联网、搜索引擎观察与思考。

导入Web日志到MySQL数据库

2008年12月06日 by 樂思蜀

访问分析是SEO的一项重要工作,但统计、分析工具毕竟功能是针对大众的,很多时候SEO需要一些特定的数据,是统计分析软件、程序所不能提供的。这样,直接的Web日志分析就是最合适的了,日志中会记录每一个访问情况,只要按自己的意愿提取、组合,就能得到想要的数据。

就这个问题与星箭聊了挺长时间,最后一致认为将日志导入到SQL数据库(MySQL & SQL Server)中,使用SQL语句分析是最方便的,需要什么样的数据,只要使用相应的SQL命令就能实现。

我的服务器是Linux的,没有 SQL Server,之前就没再继续这件事。今天聊到这个话题时认真的搜索了一下,找到了使用MySQL分析日志的第一步,记录在此。

下一步的分析方法我有心得后会发布在博客中,有兴趣的朋友可以留意;同时,征集精通于SQL语句的朋友,一起讨论分析的各种方法,并分享给其他朋友。

导入Web日志到MySQL数据库的实现

1、修改Apache日志格式

修改Web日志格式为:

Logformat combined %>a,%ui,%un,[%tl],"%rm %ru HTTP/%rv",%Hs,%h","%{User-Agent}>h",%Ss:%Sh

明白的朋友应该一看就知道了,SQL需要导入的内容有特定的分隔符,Apache的日志默认是以空格分隔的,而有些内容(如状态码中的 200 610)也包含空格,这就无法准确的导入。

将日志格式修改为以逗号分隔,就能准确的导入了。还可以根据自己的需要,取消日志格式中不需要的内容,减少日志文件大小。

2、建立MySQL数据表

drop table if exists weblog;
create table weblog (
id int unsigned auto_increment PRIMARY KEY not null,
l_date date,
l_time time,
c_ip varchar(15),
s_ip varchar(15),
s_port varchar(5),
method varchar(10),
path varchar(255),
query varchar(255),
status varchar(3),
domain varchar(50),
system varchar(200)
);

注:上面只是一个MySQL数据表结构范例,没有与上一步日志格式对应,请勿直接复制使用!

新建一个数据库,数据表结构与日志格式对应起来。

3、导入日志到MySQL中

LOAD DATA INFILE  '/日志位置/日志文件'  INTO TABLE weblog FIELDS TERMINATED BY ',';

weblog 对应上面的数据表名。

第二步就是分析了,如上所说,有心得后再分享。

另外,从网上找到一个将IIS日志导入到MySQL数据库的.pl程序,原理相通的,需要的点这里下载(Readme.txt为使用说明)。

WordPress 2.5 的一些技巧分享

2008年04月07日 by 樂思蜀

升级到 WordPress 2.5 后,是不是还有些不习惯呢?这次升级变化很大,比如,我遇到一个挺好的评论,但刻意包含了网址,想保留此君的评论但去除网址,竟然找不到编辑的地方,后来观察才发现点击评论者名称编辑。这些操作上的变化慢慢习惯了,WordPress 2.5 在以前版本的基础上,速度和性能上是值得称道的。

下面樂思蜀为你分享三个技巧:

Gzip Page

WordPress 2.5 将之前的“Gzip”选项去除了,交由服务器来匹配(感谢xjb的指正)。使用压缩输出,能显著的提高性能,节省30-40%的带宽和加载时间,现在介绍两种在 WordPress 中开启 Gzip 压缩输出的方法。

说明:下面介绍的两种方法均需 Apache 版本 2.0 以上,并且加载了 mod_deflate 模块;Apache 2.0 以下,使用 ob_gzhandler 函数通过 GZip 压缩页面,会大量消耗服务器内存,不推荐使用。

方法一:使用 Apache 的 mod_deflate 模块来实现 gzip

在 .htaccess 文件中插件以下代码:

<ifmodule mod_deflate.c>
AddOutputFilterByType DEFLATE text/html text/xml application/x-httpd-php application/x-javascript text/css
</ifmodule>

<ifmodule mod_deflate.c>
AddOutputFilter DEFLATE html xml php js css
</ifmodule>

方法二: WordPress 2.5 的 Gzip 插件。

点击这里下载:Filosofo GZIP Plugin

使用非常简单,上传到插件目录,激活插件即可。

Memcache

Memcache 是什么?Apache 官方文档上有详细说明;或者Google一下:Memcache 是一种高性能的分布式内存对象缓存系统,Memcache 既能提高访问的速度,同时还减低了数据库的负载。

环境检查:

  • 独立服务器,可查看 Apache 配置文件 httpd.conf,如果 LoadModule mem_cache_module 没有注释,说明已经开启。
  • 虚拟主机,使用 phpinfo() 查看,Loaded Modules 中如果包含 mod_mem_cache,说明已经开启。

WordPress 启用 Memcache:

打开 WordPress 的 wp-settings.php 文件,搜索 object-cache.php,会发现 WordPress 默认已经启用 Memcache 功能,如果检查到 object-cache.php 文件存在,直接调用它作为 WordPress 对象缓存机制。

所需文件下载:

可以点这里进入下载,或在本站下载

包含2个文件:object-cache.php 和 memcached-client.php

下载后直接放到 wp-content 目录下即可。

丰富你的Ping

当发表了新文章后,WordPress 可以 Ping 引用的目标(如果设置中开启)和预设的 Ping 地址,告知目标你的博客更新内容。

WordPress 安装后预设的 Ping 地址只有一个(设置 -> 撰写),我们可以把比较重要的、国内流行的一些地址加入进去,比如我设置的有:

http://blogsearch.google.com/ping/RPC2

http://blog.yodao.com/ping/RPC2

http://www.feedsky.com/api/RPC2

http://www.xianguo.com/xmlrpc/ping.php

http://www.zhuaxia.com/rpc/server.php

http://rpc.technorati.com/rpc/ping

http://rpc.pingomatic.com/

你也可能参考官方的 Ping 服务列表,加入自己喜欢的地址。

Linux下cronolog安装配置

2008年04月06日 by 樂思蜀

Linux下运行的Web服务器Apache,默认日志文件是不分割的,一个整文件既不易于管理,也不易于分析统计。安装cronolog后,可以将日志文件按时间分割,易于管理和分析。

cronolog安装配置非常简单,下载后只需要输入几个命令即可完成。

1、下载(最新版本

#  wget http://cronolog.org/download/cronolog-1.6.2.tar.gz

2、解压缩

# tar zxvf cronolog-1.6.2.tar.gz

3、进入cronolog安装文件所在目录

# cd cronolog-1.6.2

4、运行安装

# ./configure
# make
# make install

5、查看cronolog安装后所在目录(验证安装是否成功)

# which cronolog

一般情况下显示为:/usr/local/sbin/cronolog

整个安装过程结束,下面需要把日志的格式配置一下:

1、虚拟主机配置文件 httpd-vhosts.conf

将Web日志设置 CustomLog 修改为以下格式

CustomLog "|/usr/local/sbin/cronolog /www/logs/example_%Y%m%d.log" combined

当然,错误日志设置 ErrorLog 也可以利用 cronolog 分割,设置为

ErrorLog "|/usr/local/sbin/cronolog /www/logs/error_%Y%m%d.log"

2、如果服务器上只有一个站点(当然这种情况比较少),直接按上面所说格式修改 httpd.conf 文件日志设置部分。

说明:

  • 绿色部分 为 cronolog 安装后所在位置,系统版本不同可能位置不完全一样,以 which 命令查看到的位置为准;
  • 蓝色部分 为设置的日志文件所在位置,根据需要修改;
  • 红色部分 为设置的日志文件标识性字符,根据需要修改;
  • %Y%m%d 为日志文件分割方式,例子中为“年月日”,也可以修改成自己需要的。

Apache 服务器防DDOS模块mod_evasive使用说明

2008年02月19日 by 樂思蜀

1、mod_evasive 介绍

mod_evasive 是Apache(httpd)服务器的防DDOS的一个模块。对于WEB服务器来说,是目前比较好的一个防护DDOS攻击的扩展模块。虽然并不能完全防御DDOS攻击,但在一定条件下,还是起到缓服Apache(httpd)服务器的压力。如果配合iptables、硬件防火墙等防火墙设备配合使用,可能有更好的效果。可惜LinuxSir.Org 并没有硬件防火墙,所以是否这种组合效果有更好的效果,我没办法验证。

mod_evasive 的官方地址: http://www.zdziarski.com/projects/mod_evasive

2、mod_evasive 的安装和配置

2.1 mod_evasive 下载

mod_evasive_1.10.1.tar.gz

2.2 mod_evasive 安装

安装 mod_evasive 之前,你要用安装Apache(httpd)服务器软件包,还要安装httpd-devel或 apache-dev。在Slackware 12.0中,安装httpd软件即可;

对于Apache 1.x 请用下面的编译方法:

#/usr/sbin/apxs -iac mod_evasive.c

对于Apache 2.x 可以用下面的办法:

#tar zxvf mod_evasive_1.10.1.tar.gz
#cd mod_evasive
#/usr/sbin/apxs -i -a -c mod_evasive20.c

注:apxs 用于编译模块工具;如果是用系统自带的软件包,一般位于/usr/sbin目录。如果您是自己编译安装Apache(httpd)的,你应该自己来指定路径;

我们然后修改/etc/ld.so.conf 文件,把编译出来的动态模块的所在位置指定在 ld.so.conf中;比如我用的是Aapche 2.x ,编译完成后,模块mod_evasive20.so 安装到了 /usr/lib/httpd/modules 目录中;那我们就要把 这个目录写入到ld.so.conf中。

#echo “/usr/lib/httpd/modules” >> /etc/ld.so.conf
#ldconfig

2.3 mod_evasive 的配置

在编译安装完成后,会自动插入一行到Apache 配置文件中,对于Apache 2.x 版本中,应该在其配置文件中有类似下面的一行;

LoadModule evasive20_module   lib/httpd/modules/mod_evasive20.so

对于Apache 1.x来说,也应该差不多,大体只是路径不同罢了;

然后我们再修改 Apache 的配置文件,配置文件名为httpd.conf;

在Apache v1.x 版本中,要加入:

<IfModule mod_evasive.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

在Apache v2.x加入:

<IfModule mod_evasive20.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

如果您不知道把这些插入到哪,用下面的办法做也是可以的;

在/etc目录中创建一个文件,比如mod_evasive.conf:

#touch /etc/mod_evasive.conf

然后把根据自己的Apache版本来加入相应的内容;

接着我们再修改 httpd.conf ,在最后一行加入

Include /etc/mod_evasive.conf

修改完成后,我们要重启Apache服务器;

比如在Slackware 12.0中,Apache 2.x的重启,我们要用到

#/etc/rc.d/rc.httpd restart

在Redhat、Fededora、Debian、Ubuntu、CentOS中的Apache,可以用:

#/etc/init.d/httpd restart

#/etc/init.d/apache restart

2.4 对mod_evasive测试验证

防DDOS的模块做好后,我们可以要验证,可以用Apache 自带的ab工具,系统默认安装在/usr/sbin目录中;比如:

#/usr/sbin/ab -n 1000 -c 50 http://www.google.com:80/

注:上面的例子的意思是,如果您的服务器是google的WEB服务器,我们要发送数据请求包,总共1000个,每次并发50个;

另外一个测试工具就是mod_evasive的解压包的目录中,有个test.pl ,你可以修改IP地址,然后用

#perl test.pl

是不是有效果,请根据 ab工具或 测试脚本出来的结果来查看;

因为我们编译mod_evasive时,用的是默认配置,所以日志被存放在/tmp目录中。如果有DDOS攻击,会在/tmp产生日志。日志的文件是以 dos-开头的;

3、mod_evasive 的高级配置

如果想更改一些适合自己的参数,有些必要的参数,并不是通过配置文件修改就一下起作用的,我们要修改源码包中的 mod_evasive.c(Apache 1.x用之) 或 mod_evasive20.c (Apache 2.x用之);

#define DEFAULT_HASH_TBL_SIZE   3097ul  // Default hash table size
#define DEFAULT_PAGE_COUNT      2       // Default maximum page hit count per interval
#define DEFAULT_SITE_COUNT      50      // Default maximum site hit count per interval
#define DEFAULT_PAGE_INTERVAL   1       // Default 1 Second page interval
#define DEFAULT_SITE_INTERVAL   1       // Default 1 Second site interval
#define DEFAULT_BLOCKING_PERIOD 10      // Default for Detected IPs; blocked for 10 seconds
#define DEFAULT_LOG_DIR         “/tmp”  // Default temp directory

比如我们改改其中的数字,根据英文很容易理解。比如修改日志存放目录,就把/tmp改成别的目录。如果您不知道放在哪好,还是用默认的吧;

如果您在这里更改了参数,不要忘记修改Apache 配置文件中关于mod_evasive 的参数;

如果您想加入一些其它的参数,请查阅源码包中的README,里面有详细说明,大多来说没太大的必要……

这个文件相当重要,如果您想更改某些设置,就要修改这个文件…… 

参考文档

参考 mod_evasive 源码包中的README

Apache 日志设置不记录指定文件类型的方法

2008年02月19日 by 樂思蜀

Apache日志精准的记录了Web访问的记录,但对于访问量很大的站来说,日志文件过大对于分析和保存很不方便。可以在http.conf(或虚拟主机设置文件httpd-vhosts.conf)中进行设置,限制日志不记录指定文件类型,减少日志文件空间占用。

FilesMatch “\.(ico|gif|jpg|swf)”
SetEnv IMAG 1
/FilesMatch
CustomLog logs/access_log combined env=!IMAG

第一行中:蓝色部分为指定文件类型,设置后将不记录这些文件的访问;

第四行中:绿色部分为日志路径,根据实际情况设置;蓝色部分为apache日志4种记录方式(common、combined、referer、agent)之一,根据实际需要选择;env=!IMAG一定要加在最后,指令不记录上面设定的文件类型。

注:红色的括号为全角,使用时转换成半角。