最近建设了北京某政府机构的网站,网站前段使用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. TCP基本概念

    TCP协议是一个复杂的.可靠的字节流协议.不通用UDP协议. TCP提供客户与服务器之间的连接.TCP客户先与给定的服务器建立一个连接,再跨该连接与服务器交换数据,最后终止这个连接. TCP提供了可靠 ...

  2. 关于Android Studio更新后一直Refreshing的解决办法!

    今天更新了一下studio一直是这个问题 查了很多资料终于解决了 造成这个问题的原因是要更新的gradle版本和studio安装路径中的gradle版本不一致导致的 把他们改成一致的即可 在这个目录里 ...

  3. web_测试用例注意点

    测试是一种思维,包括情感思维和智力思维,情感思维主要体现在一句俗语:思想决定行动上(要怀疑一切),智力思维主要体现在测试用例的设计上.具有了这样的思想,就会找出更多的bug.(^_^个人认为,不代表官 ...

  4. Codeforces Round #493 (Div. 2) A. Balloons 贪心水题

    由于是输出任意一组解,可以将价值从小到大进行排序,第一个人只选第一个,第二个人选其余的.再比较一下第一个人选的元素和第二个人所选元素和是否相等即可.由于已将所有元素价值从小到大排过序,这样可以保证在有 ...

  5. oralce存储过程实现不同用户之间的表数据复制

    create or replace procedure prc_test123 is temp_columns ); sqltemp ); cursor cur is select table_nam ...

  6. 【XSY2689】王子 - 网络流

    复活!qwq 题目来源:2018冬令营模拟测试赛(九) 题意: [背景描述]     不是所有王子都会遇见自己的中关村,主公,公主. 从前有个王子姓王,王王子遇到了一位美丽的公主,她的名字当然是公公主 ...

  7. css font-family 字体组

    介绍图片来自: http://www.runoob.com/cssref/css-websafe-fonts.html

  8. 【NOI2001】食物链

    [NOI2001]食物链 题意 动物王国中有三类动物 A,B,C,这三类动物的食物链构成了有趣的环形.A 吃 B,B 吃 C,C 吃 A. 现有 N 个动物,以 1 - N 编号.每个动物都是 A,B ...

  9. Ajax兼容性问题

    对于IE7及以上直接使用 XMLHttpRequest 就行,但对于过老版本IE建议直接提示用户下载新版浏览器更佳.或者用以下代码兼容IE6: function CreateXHR() { if(XM ...

  10. 工具-WIN7-内存占用过高解决办法

    我的WIN7内存竟然吃到了7.6G,太不可思意了 第一步 看看网上的解决办法 http://jingyan.baidu.com/article/870c6fc31060eab03fe4beee.htm ...