您的位置:首页 > 运维架构 > Apache

Linux下Apache与Jboss服务器配置整合实现方案

2010-05-15 07:26 495 查看
目录

1 引言... 3

1.1 背景... 3

1.2 编写目的... 3

1.3 定义... 3

1.4 参考资料... 3

2. Apache与JBoss服务器简介... 3

2.1 Apache服务器... 3

2.2 JBoss服务器... 3

3. Apache与JBoss服务器配置整合... 3

3.1 让Apache与JBoss一起工作... 3

3.1.1 简介... 3

3.1.2 环境... 3

3.1.3 安装... 4

3.1.4 配置... 4

3.1.5 运行... 6

3.1.6 当Apache和JBoss分处两台服务器时... 7

3.2 自定义Apache的日志输出项... 6

3.2.1 WEB日志分析的原理... 6

3.2.2 Apache日志的配置和管理... 6

1.引言

1.1 背景

随着Internet上Web服务的发展,对Web服务器的运行和访问情况进行详细和周全地分析,可以及时了解网站运行情况,发现网站存在的不足,促进网站更好地发展,它的重要性越来越突出。

管理Web网站不只是监视Web的速度和Web的内容传送。它不仅要关注服务器每天的吞吐量,还要了解这些Web网站的外来访问,了解网站各页面的访问情况。根据各页面的点击频率来改善网页的内容和质量,提高内容的可读性,以及跟踪包含有商业交易的步骤及管理Web网站“幕后”的数据等。

为了更好地提供WWW服务,监控Web服务器的运行情况、了解网站内容的详细访问状况就显得越来越重要和迫切了。而这些要求都可以通过对Web服务器日志文件的统计和分析来实现。

1.2 编写目的

由于XXXX网站除了有大量静态和动态页面被分别部署在Apache和JBoss服务器上,为了方便对日志文件进行分析,需要提供统一的访问日志。通过整合Apache和JBoss服务器,我们可以把用户对JBoss上动态页面的访问日志输出到Apache的日志文件中,并自定义日志信息的输出格式,本文将就这一目的,对Web服务器日志分析的原理和技术进行讨论。

1.3 定义

$APACHE_HOME - Apache服务器安装目录

$JBOSS_HOME - JBoss服务器安装目录

$JAVA_HOME - Java安装目录

以上都需要在Linux下配置环境变量才可用。

1.4 参考资料

Apache官方文档

2. Apache与JBoss服务器简介

2.1 Apache服务器

Apache2.2.0(http://archive.apache.org/dist/httpd/httpd-2.2.0.tar.gz)

2.2 JBoss服务器

JBoss-4.0.4.GA(http://jaist.dl.sourceforge.net/sourceforge/jboss/jboss-4.0.4.GA-Patch1-installer.jar)

3. Apache与JBoss服务器配置整合

3.1 让Apache与JBoss一起工作

3.1.1 简介

要让Apache与JBoss一起工作,实际上就是把Apache和Tomcat整合起来,而Tomcat是JBoss一部分,我们需要的是mod_jk2这样的Apache + Tomcat的连接器。

3.1.2 环境

jdk1.5.0_03(略)

jakarta-tomcat-connectors-1.2.15-src.tar.gz(http://archive.apache.org/dist/jakarta/tomcat-connectors/jk/source/jk-1.2.15/jakarta-tomcat-connectors-1.2.15-src.tar.gz)

3.1.3 安装

R 安装JDK,代码如下:

略。

R 安装Apache,代码如下:

# tar xzvf httpd-2.2.0.tar.gz

# cd httpd-2.2.0

# ./configure --prefix=/usr/local/apache2 --enable-mods-shared=all --disable-info

# make

# make install

R 安装JBoss,代码如下:

安装JBoss需要带有all目录。

R 编译生成mod_jk,代码如下:

# tar xzvf jakarta-tomcat-connectors-1.2.15-src.tar.gz

# cd jakarta-tomcat-connectors-1.2.15-src/jk/native

# ./configure --with-apxs=/usr/local/apache2/bin/apxs

# make

# cp ./apache-2.0/mod_jk.so /usr/local/apache2/modules/

3.1.4 配置

在/usr/local/apache2/conf/下面建立两个配置文件mod_jk.conf和workers.properties。

R 生成配置文件 mod_jk.conf

# vi mod_jk.conf

添加以下内容:

# 指出mod_jk模块工作所需要的工作文件workers.properties的位置

JkWorkersFile /usr/local/apache2/conf/workers.properties

# 指出 mod_jk 模块的日志输出位置

JkLogFile /usr/local/apache2/logs/mod_jk.log

# 设置 mod_jk 模块的日志级别 [debug/error/info]

JkLogLevel info

# 设置 mod_jk 模块的日志格式

JkLogStampFormat "[%a %b %d %H:%M:%S %Y]"

# JkOptions indicate to send SSL KEY SIZE,

JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories

# JkRequestLogFormat set the request format

JkRequestLogFormat "%w %V %T"

# 将所有对特定文件或目录的请求通过ajp13的协议送给JBoss,让JBoss服务器来处理

#(用于测试配置是否成功,见3.1.5,配置成功后请注释)

JkMount /web-console/* worker1

# 将所有对后台(带有/xxxx目录)的请求通过ajp13的协议送给JBoss,让JBoss服务器来处理

JkMount /xxxx/* worker1

R 生成配置文件 workers.properties

# vi workers.properties

添加以下内容:

# 让 mod_jk 模块知道 Tomcat 在哪里

workers.tomcat_home=$JBOSS_HOME/server/all/deploy/jbossweb-tomcat55.sar

# 让 mod_jk 模块知道 JDK 在哪里

workers.java_home=$JAVA_HOME

ps=/

# Defining a worker named worker1 and of type ajp13

worker.list=worker1

# Set properties for worker1

worker.worker1.type=ajp13

worker.worker1.host=localhost

worker.worker1.port=8009

worker.worker1.lbfactor=50

worker.worker1.cachesize=10

worker.worker1.cache_timeout=600

worker.worker1.socket_keepalive=1

worker.worker1.socket_timeout=300

R 修改配置文件httpd.conf,作以下修改:

1. 将Listen 80 修改为 Listen 127.0.0.1:80

2. 将ServerName 修改为 ServerName LocalHost:80

3. 如果网页放在/var/www/html下,就需要修改DocumentRoot,具体根据实际情况来定,代码如下:

DocumentRoot "/var/www/html"

<Directory "/var/www/html">

Options Includes FollowSymLinks

AllowOverride None

Order deny,allow

Allow from all

XBitHack on

</Directory>

4. 增加关于加载mod_jk的语句,代码如下:

LoadModule jk_module modules/mod_jk.so

Include /usr/local/apache2/conf/mod_jk.conf

3.1.5 运行

R 启动JBoss,在$JBOSS_HOME/bin/目录下以sh run.sh –c all 命令启动JBoss服务器;

R 启运Apache,如果启动成功,说明对配置文件的修改没有问题;

R 打开IE浏览器,输入 http://localhost/web-console/,如果能看到JBoss的Administration Console页面,说明Apache与JBoss服务器整合成功了。

3.1.6 当Apache和JBoss分处两台服务器时
当Apache和JBoss分处两台服务器时,需要通过NFS(网络文件系统)将JBoss共享给Apache所在的服务器。比如现有Apache所在服务器IP:192.168.100.56(NFS客户机);JBoss所在服务器IP:192.168.100.55(NFS服务器),具体配置如下:
 在NFS服务器运行 # vi /etc/exports,在文件中加入下面的代码:
/var/jboss/jboss-4.0.4.GA 192.168.100.56(rw,sync,nohide) *(ro)

其中/var/jboss/jboss-4.0.4.GA代表NFS服务器的共享目录;
192.168.100.56代表NFS客户机;
rw代表目录/var/jboss/jboss-4.0.4.GA对192.168.100.56来说具有读写访问权限;
Sync代表所有数据在请求时写入共享;
no_hide代表共享NFS目录的子目录;
ro代表目录/var/jboss/jboss-4.0.4.GA对192.168.100.56以外的机器来说仅有只读权限;

 保存exports文件之后重启NFS服务:
[root@localhost etc]# service nfs restart
关闭 NFS mountd: [ 确定 ]
关闭 NFS 守护进程: [ 确定 ]
关闭 NFS quotas: [ 确定 ]
关闭 NFS 服务: [ 确定 ]
启动 NFS 服务: [ 确定 ]
关掉 NFS 配额: [ 确定 ]
启动 NFS 守护进程: [ 确定 ]
启动 NFS mountd: [ 确定 ]
You have new mail in /var/spool/mail/root [ 确定 ]
 完成NFS服务器配置之后,需要在NFS客户机上加载共享资源,代码如下:
# mount 192.168.100.55: /var/jboss/jboss-4.0.4.GA /mnt
 完成上面的工作,我们还需要对之前提到的workers.properties 文件进行修改,如下:
# 让 mod_jk 模块知道 Tomcat 在哪里
workers.tomcat_home=$JBOSS_HOME/server/all/deploy/jbossweb-tomcat55.sar
将上句改为:
workers.tomcat_home=/mnt/server/all/deploy/jbossweb-tomcat55.sar
至此完成当Apache和JBoss分处两台服务器时的配置。

3.2 自定义Apache的日志输出项

3.2.1 WEB日志分析的原理

网站服务器日志记录了web服务器接收处理请求以及运行时错误等各种原始信息。通过对日志进行统计、分析、综合,就能有效地掌握服务器的运行状况,发现和排除错误原因、了解客户访问分布等,更好的加强系统的维护和管理。

Web访问机制

3.2.2 Apache日志的配置和管理

Apache的日志记录主要依靠它的一些模块协助完成,不同的模块完成不同的记录内容。所以要实现xxxx统计所需要的日志内容,还需要配置apache的./conf/httpd.conf文件:

R 去掉下面语句的注释,usertrack_module模块可以生成cookie并将其发送到客户端,这样就能实现唯一访客的cookie跟踪了。(如果该语句没有注释就不必做这步操作了!)

LoadModule usertrack_module modules/mod_usertrack.so

R 设置cookie在客户端的保存年限,并开启cookie跟踪功能

CookieExpires "10 years"

CookieTracking On

R 对Apache记录的日志进行过滤,剔除不需要被记入日志的资源请求;另外,减少Apache日志操作,也可以提高系统的访问速度。

# filter the localhost visit ---- 具体IP根据实际情况来定

SetEnvIf Remote_Addr "127/.0/.0/.1" dontlog

#---------add by david.tao on 2007-6-29------------------

SetEnvIf Remote_Addr "::1" dontlog

SetEnvIf Request_URI "^/ny/.*$" dontlog

SetEnvIf Request_URI "^/img/.*$" dontlog

SetEnvIf Request_URI "^/xxxx/LoginPage.page" dontlog

# filter some special directories ---- 具体目录根据实际情况来定

SetEnvIf Request_URI "^/system/.*$" dontlog

SetEnvIf Request_URI "^/export/.*$" dontlog

SetEnvIf Request_URI "^/resources/.*$" dontlog

# filter the special resource ---- 具体资源根据实际情况来定

SetEnvIf Request_URI /.gif$ dontlog

SetEnvIf Request_URI /.jpg$ dontlog

SetEnvIf Request_URI /.bmp$ dontlog

SetEnvIf Request_URI /.png$ dontlog

SetEnvIf Request_URI /.js$ dontlog

SetEnvIf Request_URI /.css$ dontlog

SetEnvIf Request_URI /.swf$ dontlog

SetEnvIf Request_URI /.txt$ dontlog

# filter the intranet visit ---- 具体IP根据实际情况来定

SetEnvIf Remote_Addr "210/.51/.173/.26" dontlog

# filter the google bot ---- 以下可以不需要添加

SetEnvIf Remote_Addr "66/.249/.6[4-9]/.[0-9]+" dontlog

SetEnvIf Remote_Addr "66/.249/.[7-8][0-9]/.[0-9]+" dontlog

SetEnvIf Remote_Addr "66/.249/.9[0-5]/.[0-9]+" dontlog

# filter the microsoft bot: 65.52.0.0 - 65.55.255.255

SetEnvIf Remote_Addr "65/.5[2-5]/.[0-9]+/.[0-9]+" dontlog

R 注释掉原来的 LogFormat语句,增加以下自定义日志格式的语句。

LogFormat "%h*%t*%U*%q*%>s*%b*%{Referer}i*%{User-Agent}i*%{Cookie}i*" combined

R 日志轮循,使用cronolog,可以实现日志文件按天分割、按周轮巡,官方下载地址:http://cronolog.org/download/cronolog-1.6.2.tar.gz,解压、编译和安装的代码如下:

# tar xvfz cronolog-1.6.2.tar.gz

# cd cronolog-1.6.2

# ./configure

# make

# make check

# make install

R 默认情况下cronolog是安装在/usr/local/sbin下,在httpd.conf中注释掉原来的 CustomLog语句,修改apache日志配置命令如下所示:

CustomLog "|/usr/local/sbin/cronolog /usr/local/apache2/logs/%w/xxxx_log" combined env=!dontlog

R 定时(每天00:01)拷贝apache前一天的日志(一分钟前)到指定目录供日志分析程序读取,若目标目录存在同名文件则自动覆盖,并将源目录文件置空。这一部分是通过Linux的crontab功能来实现的,先用vi编写一个脚本文件:cp_xxxx_log,把下面的代码粘贴进去:

#sh!=/bin/bash

/bin/cp -f /usr/local/apache2/logs/`date --date "1 days ago" +/%w`/xxxx_log /var/www/html/xxxxlogs/xxxx_log_yesterday

cat /dev/null > /usr/local/apache2/logs/`date --date "1 days ago" +/%w`/xxxx_log

echo "xxxx_log" >> /usr/local/apache2/logs/`date --date "1 days ago" +/%w`/xxxx_log

保存退出之后,用如下命令给该脚本添加可执行权限:

chmod 755 cp_xxxx_log

然后用crontab -e添加任务:

01 0 * * * /usr/local/apache2/cp_xxxx_log

注:也可以在保存cp_cnaq_log文件后,通过vi修改/etc/crontab,在最后面添加下面的语句:

01 0 * * * root sh /usr/local/apache2/cp_xxxx_log

R 重新启动Apache服务,如果重启不报错,说明配置已生效。

生成的日志文档格式为:

192.168.0.34*[05/Apr/2007:16:50:45 +0800]*/xxxx/ListClientStat.page**200*2090*http://192.168.0.102/xxxx/MainMenu.page*Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon; .NET CLR 1.1.4322; InfoPath.2)*Apache=192.168.0.34.1175233034583731; screen=1024x768; language=zh-cn; colorDepth=32; JSESSIONID=6851A7CD1283D19FFE3483A5931236A4*

其中“screen=1024x768; language=zh-cn; colorDepth=32;”三项cookie值是通过网站页面JS写入客户端浏览器后获取的,与Apache服务器配置无关。

转自:http://hi.baidu.com/198208/blog/item/2c70910038bef513728b65aa.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: