众所周知,Apache处理动态页面的能力非常稳定,而且由于apache发展早,社区活跃,Linux SA青睐使用Apache来均衡Tomcat,处理JSP动态语言。

而我们熟知的Nginx Web服务器则是处理静态能力非常强悍的WEB服务器,最近又有一种新的架构性能也很强劲(Linux+Nginx+Apache+Mysql+PHP),有时间可以一起探讨。

今天我们来学习Apache+tomcat如何来整合,此架构已用于线上。

一、系统版本:

1
2
3
4
Centos 5.3 64位系统
Nginx版本为:httpd-2.2.13.tar.bz2    
Jdk版本为:1.6.0_18
Tomcat版本为:Apache Tomcat/6.0.30

二、安装Apache:

1
2
3
4
5
6
7
cd  /usr/src  &&  tar  -jxvf httpd-2.2.13. tar .bz2 
 
cd  httpd-2.2.13 /srclib/apr  &&. /configure  --prefix= /usr/local/apr  && make  && make  install
 
cd  .. /apr-util/  && . /configure  --prefix= /usr/local/apr-util  --with-apr= /usr/local/apr 
make && make  install 
cd  ../../ && . /configure  --prefix= /usr/local/apache2  -- enable -mods-shared=all --with-mpm=worker -- enable -deflate -- enable -cache -- enable -disk-cache -- enable -mem-cache -- enable - file -cache -- enable -proxy -- enable -proxy-ajp -- enable -proxy-balancer -- enable -proxy-http -- enable -rewrite  --with-apr= /usr/local/apr  --with-apr-util= /usr/local/apr-util

    注*这里安装mod_proxy处理Tomcat jsp页面模块,安装apr、apr-util增加Tomcat处理性能,当然也可以用mod_jk的方式,如果是mod_jk的方式的话,可以参考这篇文章:

1
http: //bbs .linuxtone.org /thread-1195-1-1 .html

三、Tomcat安装配置:

    安装Tomcat之前需要安装JAVA JDK,chmod o+x jdk* && ./jdk* ;程序包会提示按回车键,我们根据提示安装即可,解压完毕,会在当前目录生成 jdk1.6.0_18 文件夹,如果jdk是tar文件,可以执行tar -xzf jdk.xxx.tar.gz 解压,然后移动到/usr/java/下:

1
2
3
4
5
6
7
8
mkdir  -p  /usr/java  &&  mv  jdk1.6.0_18  /usr/java/ 下  
#vi /etc/profile 最后面加入以下语句:  
export  JAVA_HOME= /usr/java/jdk1 .6.0_18  
export  CLASSPATH=$CLASSPATH:$JAVA_HOME /lib :$JAVA_HOME /jre/lib  
export  PATH=$JAVA_HOME /bin :$JAVA_HOME /jre/bin :$PATH:$HOMR /bin  
#source /etc/profile //使环境变量马上生效  
java --version  // 查看java版本,显示版本是1.6.0_18,并且是64位的证明安装成功!  
Java HotSpot(TM) 64-Bit Server VM (build 16.0-b10, mixed mode)

    然后解压tomcat软件包:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
cd  /usr/src  &&  tar  xzf apache-tomcat-6.0.30. tar .gz  
mv  apache-tomcat-6.0.30  /usr/local/tomcat1
cp  -r  /usr/local/tomcat1  /usr/local/tomcat2
#1.分别给两个tomcat创建发布目录
 
  mkdir  -p  /usr/webapps/ {www_1,www_2}  
  
#2.修改Tomcat1的 server.xml文件如下内容,设置route ID:
   
<Enginename= "Catalina" defaultHost= "localhost"  jvmRoute= "tomcat1" >
 
#3.然后在</Host>前面加入如下内容,设置自定义发布目录:  
 
<Context  path= ""  docBase= "/usr/webapps/www1"   reloadable= "true" />
 
#4.同样的道理设置tomcat2:  
 
<Enginename= "Catalina" defaultHost= "localhost" jvmRoute= "tomcat2" >
<Contextpath= "" docBase= "/usr/webapps/www_2" reloadable= "true" />
 
#5.分别设置两个tomcat的jvmroute名称为tomcat1和tomcat2,一会跟apache整合会用到。

四、整合Apache+Tomcat:

在vi /usr/local/apache2/conf/vhosts.conf添加如下内容:(新建)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
NameVirtualHost *:80  
<VirtualHost *:80>
    ServerAdmin wgkgood@163.com  
    DocumentRoot  "/usr/webapps/www"  
    ServerName  192.168.2.79  
<Directory  "/usr/webapps/www " >
       AllowOverride None  
       Options None  
       Order allow,deny  
       Allow from all  
< /Directory >
    ProxyRequests Off  
    RewriteEngine On  
    ProxyPreserveHost On  
    RewriteRule ^$ balancer: //wwwCluster/  [P,L,NC]  
    RewriteRule ^/(.*)$ balancer: //wwwCluster/ $1 [P,L,NC]  
<Proxy balancer: //wwwCluster >
    BalancerMember ajp: //localhost :8411  route=tomcat1
    BalancerMember ajp: //localhost :8412  route=tomcat2
< /Proxy >
< /VirtualHost >

    如上,8411和8412是两个tomcat的AJP端口,可以根据实际情况修改,这样的话,所有配置都完毕了!启动apache ok!

    在两个tomcat发布目录分别创建index.jsp文件,Tomcat1内容如下:

1
2
3
4
5
6
7
<html>
<body>
<h1> TOMCAT_1 JSP Test Page< /h1 >
<%=new java.util.Date()                                    
%>
< /body >
< /html >

Tomcat1内容如下:

1
2
3
4
5
6
7
<html>
<body>
<h1>TOMCAT_2 JSP Test Page< /h1 >
<%=new java.util.Date()                                    
%>
< /body >
< /html >

    然后直接访问 http://192.168.2.79 ,会出现两个tomcat发布的不同页面,则表示Apache+Tomcat整合完毕!

    附:如果要测试tomcat性能,使用LoadRunner,开启Tomcat Jconsole连接配置:

1
2
3
JAVA_OPTS="-server -Xms2048m -Xmx2048m -Djava.library.path=/usr/local/apr/lib -XX:PermSize=256m -XX:MaxPermSize=256m -XX:NewSize=192m
  -XX:MaxNewSize=384m -Xloggc:/usr/local/tomcat/logs/gc.out -Djava.rmi.server.hostname=192.168.0.18 -Dcom.sun.management.jmxremote.po
rt=10000 -Dcom.sun.management.jmxremote.ssl= false  -Dcom.sun.management.jmxremote.authenticate= false