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

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

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

首先是apache:

apache虚拟主机配置:

虚拟主机配置:【片段】

Listen
NameVirtualHost *:
<VirtualHost *:>
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=
#tomcat的主机地址,如不为本机,请填写ip地址
worker.s1.host=192.168.1.18
worker.s1.type=ajp13
#server的加权比重,值越高,分得的请求越多
worker.s1.lbfactor= #第二个server的配置,server名为s2
worker.s2.port=
worker.s2.host=192.168.1.18
worker.s2.type=ajp13
worker.s2.lbfactor= #server名为controller,用于负载均衡
worker.controller.type=lb
#重试次数
worker.retries=
#指定分担请求的server列表,用逗号分隔
worker.controller.balanced_workers=s1,s2
#设置用于负载均衡的server的session可否共享 有不少文章说设置为1是可以的,但是我是设置为0才可以的
worker.controller.sticky_session=
worker.controller.sticky_session_force= 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="" 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="" appBase="D:\\sfile\\Zh_CN\\yfy" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<Context path="" docBase="." debug="" reloadable="true" crossContext="true"/>
<Logger className="org.apache.catalina.logger.FileLogger" directory="logs" prefix="www_xxx_gov" suffix=".txt" timestamp="true"/>
</Host>

【原创】Apache和基于虚拟主机的Tomcat集群方案的更多相关文章

  1. apache、mod_jk负载均衡与tomcat集群

    最近需要搭建apache和tomcat的集群,实现静态网站直接通过apache访问,动态网站转交给tomcat处理,实现负载均衡和tomcat集群配置. apache安装 wget http://ap ...

  2. 161028、Nginx负载均衡实现tomcat集群方案简要小结

    重点两部分:一.负载均衡二.tomcat集群 所谓tomcat集群,就是可以向外提供并行服务的多台机器,任何一台服务器宕机,其它服务器可以替代它向外提供服务,而不影响用户访问. Nginx是一个常用的 ...

  3. Grafana+Telegraf+Influxdb监控Tomcat集群方案

    前言 前一段时间自家养的几只猫经常出问题,由于没有有效的监控预警手段,以至于问题出现或者许久一段时间才会被通知到.凌晨一点这个锅可谁都不想背,为此基于目前的情况搭建了以下这么一套监控预警系统. 相关软 ...

  4. Centos下Apache+Tomcat集群--搭建记录

    一.目的 利用apache的mod_jk模块,实现tomcat集群服务器的负载均衡以及会话复制,这里用到了<Cluster>. 二.环境 1.基础:3台主机,系统Centos6.5,4G内 ...

  5. Apache + Tomcat集群 + 负载均衡

    Part I: 取经处: http://www.ramkitech.com/2012/10/tomcat-clustering-series-simple-load.html  http://blog ...

  6. FineReport关于tomcat集群部署的方案

    多台服务器集群后,配置权限.数据连接.模板.定时调度等,只能每台服务器一个个配置,不会自动同步到所有服务器. 针对上述情况,在FineReport中提供新集群部署插件,将xml配置文件.finedb/ ...

  7. 【转】Tomcat集群Cluster实现原理剖析

    此文章来源:http://zyycaesar.iteye.com/blog/296606 此文章作者:zyycaesar 对于WEB应用集群的技术实现而言,最大的难点就是如何能在集群中的多个节点之间保 ...

  8. Centos 7 环境下,如何使用 Apache 实现 SSL 虚拟主机 双向认证 的详细教程:

    1. testing ! ... 1 1 原文参考链接: http://showerlee.blog.51cto.com/2047005/1266712 很久没有更新LAMP的相关文档了,刚好最近单位 ...

  9. 配置Tomcat监听80端口、配置Tomcat虚拟主机、Tomcat日志

    6月27日任务 16.4 配置Tomcat监听80端口16.5/16.6/16.7 配置Tomcat虚拟主机16.8 Tomcat日志扩展邱李的tomcat文档 https://www.linuser ...

随机推荐

  1. 【转】.NET MVC控制器分离到类库的方法

    在.ASP.NET MVC的开发中,我们创建完项目之后,ASP.NET MVC是已Model-Controller-View的形式存在的,在创建项目自动生成的内容上Model我们很容易分离成类库,所以 ...

  2. Oracle学习系类篇(二)

    1.Oracle对表的增删改 1.1添加列 1.2修改列 1.3 删除列 1.4 修改表名称 1.5 修改列名称 1.6 删除主键约束 1.7 添加主键约束 1.8 添加外键约束

  3. C#操作sql时注意点

    ①创建必要的索引 ②使用预编译查询 ③使用参数化sql会执行预编译,第一次执行的时候DBMS会为这个SQL语句进行查询优化并执行预编译 ④调整where子句中的连接顺序 ⑤DBMS一般次用自上而下的顺 ...

  4. webpack 参数1、context: path.resolve 2、path.join('', '..', 'aa') 3、 path.posix.join('static','/aa')

    1.context: path.resolve 项目入口路径 2. 3.

  5. ​Java面向对象的概念整理

    Java中一切皆是对象! 注意:8种基本数据类型不支持面向对象的编程机制,基本数据类型的数据也不具备“对象”的特性:没有成员变量.方法可以被调用. 为解决8种基本数据类型不能当成Object类型(所有 ...

  6. I'm studying Bootstrap! loading...

    最近在学习bootstrap框架. Bootstrap框架是目前前端最受欢迎的框架,出于Twitter公司!搞前端你说你不会Bootstrap都不好意思见人呢. Bootstrap是基于Html Cs ...

  7. linux进程的有效用户ID

    进程的有效用户ID用于文件访问时的权限检查.通常,有效用户ID等于实际用户ID(也就是你登录是的用户ID),有效组ID等于实际组ID. 我们知道每个文件针对不同的user有不同的读.写.执行权限.当执 ...

  8. div基本组成要素

    title下面先清除固有格式 style{ *{ margin:0 auto padding:0 foant family } } div{ width height border backgroun ...

  9. css——应用多个样式

    应用多个样式 在class中使用多个样式 在这是会有优先级关系问题 在上面的代码中,aa,bb,中的颜色会有冲突,到底显示的结果会是黄色还是绿色呢? 结果是绿色的.它是以程序执行的先后为优先级,后执行 ...

  10. Day01-04学习内容总结

    学习内容小结 1.什么是编程,编程有什么用,什么是编程语言 2.计算的组成原理及组成部分 3.机械硬盘的工作原理 4.什么是操作系统,操作系统做了什么,为什么要有操作系统,操作系统有什么用 5.应用程 ...