【原创】Apache和基于虚拟主机的Tomcat集群方案

最近建设了北京某政府机构的网站,网站前段使用Apache做负载均衡,后端使用Tomcat做的集群,基于虚拟主机的方式访问,并且实现了静态资源和动态资源的分离。

开始的建设方案有两种,一种是使用apache的反向代理,配置虚拟主机访问不同的域名反向代理至不同的应用或者路径;第二种是tomcat配置虚拟主机,apache只做负载均衡转发请求。后来考虑了一下,还是决定使用反向代理【考虑回头换成nginx】。

其次,启用了页面cache,引入memcached作为页面cache。

首先是apache:

apache虚拟主机配置:

虚拟主机配置:【片段】

Listen 80

NameVirtualHost *:80

<VirtualHost *:80>

ServerName www.xx.gov.cn

ProxyPreserveHost On

ProxyRequests Off

ProxyPass / http://127.0.0.1:9000/

ProxyPassReverse / http://127.0.0.1:9000/

ErrorLog logs/www.xx.gov.cn-error_log.log

CustomLog logs/www.xx.gov.cn-access_log.log common

</VirtualHost>

这样通过www.xxx.gov.cn访问时apache会代理这个域名的访问,去访问http://127.0.0.1:9000,而如果不通过反向代理,由于tomcat在内网防火墙的保护之下,客户端无法直接访问tomcat,apache的重定向操作会被防火墙拦截。
注意:ProxyPassReverse 是必须要配置的,因为万一反向代理请求的是一个重定向操作,那么客户端也会随之重定向,那么会面临上述同样的问题,所以,配置该选项,apache会同样对重定向的操作进行代理,客户端感觉不到重定向。

动静分离:

首先将tomcat下的webapps目录作为apache的一个虚拟目录,或者将tomcat的应用复制一份另存目录,至保留该目录下的静态文件,配置如下【httpd.conf】:

Alias /bjoweb "d:\Pictures\web"

<Directory "d:\Pictures\web">

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    allow from all

</Directory>



Alias /owebfiles "D:\web\wenjian\webapps\owebfiles"

<Directory "D:\bjoweb\wenjian\webapps\owebfiles">

    Options FollowSymLinks

    AllowOverride None

    Order deny,allow

    allow from all

</Directory>

然后配置【workers.properties】:

#所有请求都由controller这个server处理

/*=controller

!/bjoweb/index.html=controller

/jkstatus=controller

!/*.gif=controller

!/*.jpg=controller

!/*.png=controller

!/*.css=controller

!/*.js=controller

!/*.doc=controller

!/*.pdf=controller

!/*.mdb=controller

!/*.gif=controller

!/*.jpg=controller

!/*.bmp=controller

!/*.png=controller

!/*.zip=controller

!/*.rar=controller



!/*.xls=controller



#所有包含jkstatus请求的都由status这个server处理

/jkstatus=status

这样,所有的静态资源都会交由apache处理,而动态网页等会由中间件去处理。

mod_jk配置:

# worker列表

worker.list=controller, status



#第一个server的配置,server名为s1

#ajp13 端口号,在tomcat下server.xml配置,默认8080

worker.s1.port=9019

#tomcat的主机地址,如不为本机,请填写ip地址

worker.s1.host=192.168.1.18

worker.s1.type=ajp13

#server的加权比重,值越高,分得的请求越多

worker.s1.lbfactor=1



#第二个server的配置,server名为s2

worker.s2.port=9009

worker.s2.host=192.168.1.18

worker.s2.type=ajp13

worker.s2.lbfactor=1



#server名为controller,用于负载均衡

worker.controller.type=lb

#重试次数

worker.retries=3   

#指定分担请求的server列表,用逗号分隔

worker.controller.balanced_workers=s1,s2

#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,但是我是设置为0才可以的

worker.controller.sticky_session=1

worker.controller.sticky_session_force=0



worker.status.type=status

Tomcat配置【片段,域名多达20多个】:

<Host name="www.xxx.gov.cn"  appBase="webapps"

            unpackWARs="true" autoDeploy="true"

            xmlValidation="false" xmlNamespaceAware="false">

         <Context path="" docBase="web" debug="0" reloadable="true" crossContext="true"/>

         <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www_xxx_gov" suffix=".txt" timestamp="true"/> 

      </Host>

       <!--yifen-->

       <Host name="www.xxx.xxx.gov.cn" debug="0" appBase="D:\\sfile\\Zh_CN\\yfy" unpackWARs="true" autoDeploy="true" xmlValidation="false"  xmlNamespaceAware="false"> 

         <Context path="" docBase="." debug="0" reloadable="true" crossContext="true"/>

         <Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www_xxx_gov" suffix=".txt" timestamp="true"/> 

      </Host>

你可能感兴趣的:(tomcat集群)