Apache + Tomcat 配置多个应用

今天在网上发现一篇帖子,Apache+Tomcat配置多个应用

转:http://www.blogjava.net/sealyu/archive/2008/08/25/224326.html

需求概况:

有2个服务:www.test.com,bbs.test.com。分别对应2个tomcat下的2个web应用。由apachehttpd作为互联网接入服务器,在80端口接收对这2个服务的请求。apachehttpd再将这2个请求分别对应到不同的后端web服务器(Tomcat)处理。

暂时自己还没安装成功,不过折腾了一天,特别是在找mod_proxy_**.so文件的时候

后来发现这些so文件可以自己编译生成的,所以和大家分享下

进入moudls目录

../apache/bin/apxs-c-i-amod_proxy_http.c--可以生成mod_proxy_http.so

其他的类似,../apache/bin/apxs-c-i-amod_proxy_**.c

但是生成mod_proxy.so的时候好像有点不一样

../apache/bin/apxs-c-i-amod_proxy.cproxy_util.c

下载http://download.csdn.net/detail/bdk82924/5019862

最近在服务器上需要配置多个应用,使用apache+tomcat搭配,采用mod_jk进行分配。

刚开始在同一个tomcat中配置了多个应用,后来感觉效果不好,改为每个tomcat对应一个应用。搜索资料如下:

apache2.2与tomcat集成(可以多个tomcat)

1.安装apache2.2参见:http://ttitfly.javaeye.com/admin/show/127337

3.配置域名映射到本机即127.0.0.1,同时配置service域名

127.0.0.1    localhost www.test.com www.service.test.com bbs.test.com bbs.service.test.com   
127.0.0.1    localhost www.test.com www.service.test.com bbs.test.com bbs.service.test.com

4.分别在2个tomcat里分别部署一个非常简单的应用。

第一个tomcat:端口:8080

编辑$TOMCAT_HOME/conf/server.xml

添加一个Host

<Host name="www.service.test.com" unpackWARs="true" autoDeploy="true"   
xmlValidation="false" xmlNamespaceAware="false"/>   
<Host name="www.service.test.com" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>

再在$TOMCAT_HOME/conf/Catalina下建立一个目录:www.service.test.com

然后在www.service.test.com目录下建立一个ROOT.xml,内容为:

<Context docBase="/home/mahaibo/app/test"   
privileged="true" antiResourceLocking="false" antiJARLocking="false">    
</Context>   
<Context docBase="/home/mahaibo/app/test"
privileged="true" antiResourceLocking="false" antiJARLocking="false">
</Context>

docBase指向具体的项目路径

同理第二个tomcat(端口8088)也是一样的做法:

编辑$TOMCAT_HOME/conf/server.xml

添加一个Host:

<Host name="bbs.service.test.com" unpackWARs="true" autoDeploy="true"   
xmlValidation="false" xmlNamespaceAware="false"/>   
<Host name="bbs.service.test.com" unpackWARs="true" autoDeploy="true"
xmlValidation="false" xmlNamespaceAware="false"/>

然后在$TOMCAT_HOME/conf/Catalina下建立一个目录:bbs.service.test.com

再在bbs.service.test.com目录下建立一个ROOT.xml,内容为:

<ContextdocBase="/home/mahaibo/app/bbs"

privileged="true"antiResourceLocking="false"antiJARLocking="false">

</Context>

<ContextdocBase="/home/mahaibo/app/bbs"

privileged="true"antiResourceLocking="false"antiJARLocking="false">

</Context>

5.分别启动tomcat,可以通过http://www.service.test.com:8080和http://bbs.service.test.com:8088访问

6.配置apachehttpd.conf文件。

找到apach/conf/httpd.conf文件,确认下面这些文字行前面没有"#"注释号:

LoadModule proxy_module modules/mod_proxy.so    
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so    
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so    
LoadModule proxy_connect_module modules/mod_proxy_connect.so    
LoadModule proxy_http_module modules/mod_proxy_http.so    
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so   
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_ajp_module modules/mod_proxy_ajp.so
LoadModule proxy_balancer_module modules/mod_proxy_balancer.so
LoadModule proxy_connect_module modules/mod_proxy_connect.so
LoadModule proxy_http_module modules/mod_proxy_http.so
LoadModule proxy_ftp_module modules/mod_proxy_ftp.so

并增加虚拟主机配置:

 
NameVirtualHost *:80   
<VirtualHost *:80>    
ServerName www.test.com    
ProxyIOBufferSize 8192   
ProxyRequests Off    
ProxyVia Full    
ProxyPass / http://www.service.test.com:8080/ smax=5 max=20 ttl=120 retry=300    
</VirtualHost>    
   
<VirtualHost *:80>    
ServerName bbs.test.com    
ProxyIOBufferSize 8192   
ProxyRequests Off    
ProxyVia Full    
ProxyPass / http://bbs.service.test.com:8088/ smax=5 max=20 ttl=120 retry=300    
</VirtualHost>   
NameVirtualHost *:80
<VirtualHost *:80>
ServerName www.test.com
ProxyIOBufferSize 8192
ProxyRequests Off
ProxyVia Full
ProxyPass / http://www.service.test.com:8080/ smax=5 max=20 ttl=120 retry=300
</VirtualHost>
<VirtualHost *:80>
ServerName bbs.test.com
ProxyIOBufferSize 8192
ProxyRequests Off
ProxyVia Full
ProxyPass / http://bbs.service.test.com:8088/ smax=5 max=20 ttl=120 retry=300
</VirtualHost>

7.启动apache

 
./<SPAN class=hilite1>apache</SPAN>ctl start   


./apachectl start

8可以通过访问http://www.test.com和http://bbs.test.com来分别访问2个不同tomcat下的不同应用了。

apache+tomcat配置负载均衡的网站

1.目标

使用apache和tomcat配置一个可以应用的web网站,要达到以下要求:

1、Apache做为HttpServer,后面连接多个tomcat应用实例,并进行负载均衡。

2、为系统设定Session超时时间,包括Apache和tomcat

3、为系统屏蔽文件列表,包括Apache和tomcat

2.安装tomcat

2.1.下载,解压tomcat

不要下载安装版,下载地址

http://tomcat.apache.org

2.2.配置tomcat

2.2.1.配置server的关闭口

我们需要在一台机器上跑2个不同的tomcat,需要修改不同的tomcat的关闭口,避免出现端口被占用的情况。在server.xml中找到server,将:

<Server port="8005" shutdown="SHUTDOWN">

改为

<Server port="XXXX" shutdown="SHUTDOWN">

XXXX在这里表示不同的端口:我的两个tomcat分别使用8035,8045

注意:这里之所以要配置不同的tomcat关闭口,只是因为我们使用了多个tomcat,其实用一个server多个实例也可以。

2.2.2.配置service

我们需要对不同的tomcat的service取不同的名字,在server.xml中找到:

<Service name="Catalina">

改为:

<Service name="XXXX">

两个service分别为tomcat6和tomcat5

2.2.3.配置Connector

这个部分主要是要改两个Connector,当然前提是你的tomcat只有两个Connector。

修改ajp1.3的端口:

找到:<Connectorport="8009"protocol="AJP/1.3"redirectPort="8443"/>

改为:<Connectorport="XXXX"protocol="AJP/1.3"redirectPort="8443"/>

两个Service的ajp/1.3的端口分别为:8019,8029

修改http的端口:

找到:

<Connector port="8080" protocol="HTTP/1.1" 

               maxThreads="150" connectionTimeout="20000" 

               redirectPort="8443" />

改为:

<Connector port="XXXX" protocol="HTTP/1.1" 

               maxThreads="150" connectionTimeout="20000" 

               redirectPort="8443" />

两个Service的ajp/1.3的端口分别为:8060,8070

2.2.4.配置Engine

Engine主要是配置jvmRoute属性,找到:

<Enginename="Catalina"defaultHost="localhost">

改为:

<EnginejvmRoute="XXXX"name="Catalina"defaultHost="localhost">

两个实例分别为:tomcat6和tomcat5.

2.2.5.配置公用性Context

如果有Context是多个系统公用的,比如图片等的存放地,可以做个配置:

在Host中增加:

<Contextpath="/image"docBase="D:"webRoot"image"debug="0"reloadable="false"crossContext="true">

</Context>

2.2.6.屏蔽文件列表

打开tomcat目录下的conf/web.xml,

找到:

<servlet> 

        <servlet-name>default</servlet-name> 

        <servlet-class>org.apache.catalina.servlets.DefaultServlet</servlet-class> 

        <init-param> 

            <param-name>debug</param-name> 

            <param-value>0</param-value> 

        </init-param> 

        <init-param> 

            <param-name>listings</param-name> 

            <param-value>true</param-value> 

        </init-param> 

        <load-on-startup>1</load-on-startup> 

    </servlet>

将listings参数改为false;

2.3.配置应用(web.xml)

对系统应用做些控制。

配置session过期时间,大多数网站用户都只是做些浏览性的操作,为了减轻服务器负载压力,我们将session超时时间从默认的30分钟变为5分钟。

在web应用程序的web.xml中servlet-mapping之后增加如下一段:

<session-config> 

    <session-timeout>5</session-timeout> 

</session-config>

3.安装Apache

3.1.下载、安装Apache

下载地址http://httpd.apache.org/download.cgi

下载后点击安装msi文件。

安装的时候没有什么特别需要注意的地方,按照默认就行了。是否安装为service看具体情况而定。

3.2.下载、安装Apache、tomcat的Connector

http://tomcat.apache.org/download-connectors.cgi

注意,很多网站上都介绍是JK2,可能是觉得JK2比JK要新吧,其实JK2已经停止研发了,建议使用jk1.2。

下载压缩包,之后将module目录中的mod_jk-apache****.so文件放入/module/目录下。

3.3.配置Apache(httpd.conf)

3.3.1.配置端口:

找到

Listen80

改为

Listen**

当然如果不需要改的话,就不用改了。正常情况无须更改。

3.3.2.配置DocumentRoot

找到DocumentRoot段,将其改为:

DocumentRoot"E:/MyWebsite"

这里的"E:/MyWebsite"指的是你的web程序的根路径,视具体应用而定。

3.3.3.配置serverName

找到serverName这个段,将其配置为你的ServerName

如果没有配置为域名,配为IP也可以,此处还不是很清楚,多虚拟主机的情况的配置。

3.3.4.配置虚拟主机

 
<VirtualHost *:80> 

    ServerAdmin [email protected] 

    DocumentRoot       E:/MyWebsite 

    ServerName localhost 

    DirectoryIndex index.html index.htm index.jsp 

    ErrorLog logs/error_log 

    CustomLog logs/access_log common 

    ErrorDocument 404 /sys/logon.jsp 

</VirtualHost>

3.4.配置JK方式的负载均衡

3.4.1.配置module

我们需要与tomcat做连接,所以要把tomcat的connector的模块配置进去。

在LoadModule部分加入:

LoadModulejk_modulemodules/mod_jk-apache-2.0.55.so-加载模块

这个so是我下载的版本,个人可以根据自己下载的文件名加以配置

JkWorkersFileconf/workers.properties-指定connector的配置文件名称

JkLogFilelogs/mod_jk.log-指定connector的日志文件名称

JkLogLevelinfo-指定connector的日志等级

3.4.2.配置worker列表(conf/workers.properties)

定义列表

worker.list=tomcat6,tomcat5,loadbalancer

定义一个名为“loadbalancer”的worker

其作为对多个Tomcat进程的负载平衡使用:

worker.loadbalancer.type=lb

worker.loadbalancer.balanced_workers=tomcat5,tomcat6

(负载平衡类型的worker并不与Tomcatworker通讯,它负责管理这些Tomcatworker。)

定义多个worker列表

# Set properties for tomcat6 (ajp13) 

worker.tomcat6.type=ajp13 

worker.tomcat6.host=localhost 

worker.tomcat6.port=8019 

worker.tomcat6.lbfactor=50 

worker.tomcat6.cachesize=10 

worker.tomcat6.cache_timeout=600 

worker.tomcat6.socket_keepalive=1 

worker.tomcat6.reclycle_timeout=300 

# Set properties for tomcat5 (ajp13) 

worker.tomcat5.type=ajp13 

worker.tomcat5.host=localhost 

worker.tomcat5.port=8029 

worker.tomcat5.lbfactor=50 

worker.tomcat5.cachesize=10 

worker.tomcat5.cache_timeout=600 

worker.tomcat5.socket_keepalive=1 

worker.tomcat5.reclycle_timeout=300

注意:lbfactor=50(当此Tomcatworker被用于一个负载平衡worker使用时,此属性将被使用。它定义了此worker的负载平衡权值。)

cachesize=10(当在多线程的webserver(例如apache2.0、IIS、Netscape)中使用JK时,此属性是有效的。如果将cachesize的值设置为较高的值,这些支持多线程的webserver将获得很好的处理能力。如果此属性不被设置,则连接cache特性将失效。)

3.4.3.配置Apache到tomcat的桥接

在DocumnetRoot片段下加入

JkMount /*.jsp tomcat6 

JkMount /*.do tomcat6 

JkMount /*Servlet tomcat6

这里只是简单的将apache的请求转到其中的一个tomcat中,形成桥接,至于负载均衡的时候,就无须进行这步操作,直接启动负载均衡。启动负载均衡见下一节。

3.4.4.启动负载均衡

在DocumnetRoot片段下加入

JkMount /*.jsp loadbalancer 

JkMount /*.do loadbalancer 

JkMount /*Servlet loadbalancer

-指定对所有的请求启动负载均衡,这里的loadbalancer是定义的worker的名字

这里我在配置的时候犯了两个错误:

第一是没有配置JkWorkersFileconf/workers.properties,以为Apache会自动认识(其实apache是自动产生了一个叫做ajp13的worker,指向本机的8009端口)。

第二是以为JkMount语句中出现loadbalancer,ajp13之类的是系统设定的东西,其实都是在workers.properties文件中定义的,结果出现名字不匹配的情况。后来配置了JkLogFilelogs/mod_jk.log之后看到错误日志才明白。

3.5.配置Proxy方式的负载均衡

使用Apache2.1以上的版本,就可以用mod_proxy_ajp来完成负载均衡的配置,不过到目前为止,没有看到如何让Apache负责静态部分,tomcat负责动态部分的配置方式,只能用path进行区分分发请求。如:在虚拟主机的配置中增加:

ProxyPass / ajp://localhost:8019/ 

ProxyPassReverse / ajp://localhost:8019/

而形如:

ProxyPass /*.jsp ajp://localhost:8019/ 

ProxyPassReverse /*.jsp ajp://localhost:8019/

这样的配置是不能通过的。

相关推荐