nics 发表于 2015-8-3 13:25:21

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

  最近建设了北京某政府机构的网站,网站前段使用Apache做负载均衡,后端使用Tomcat做的集群,基于虚拟主机的方式访问,并且实现了静态资源和动态资源的分离。
  开始的建设方案有两种,一种是使用apache的反向代理,配置虚拟主机访问不同的域名反向代理至不同的应用或者路径;第二种是tomcat配置虚拟主机,apache只做负载均衡转发请求。后来考虑了一下,还是决定使用反向代理【考虑回头换成nginx】。
  其次,启用了页面cache,引入memcached作为页面cache。
  首先是apache:
  apache虚拟主机配置:
  虚拟主机配置:【片段】



Listen 80
NameVirtualHost *: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


  这样通过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"

Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all

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

Options FollowSymLinks
AllowOverride None
Order deny,allow
allow from all

  然后配置【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多个】:
页: [1]
查看完整版本: 【原创】Apache和基于虚拟主机的Tomcat集群方案