Apache Server与多个独立Tomcat集成
取经自http://www.ramkitech.com/2012/03/virtual-host-apache-httpd-server-tomcat.html
继续干Tomcat和Apache Server.
继上次在单个Tomcat中配置Vritual Host以处理多个域名之后,我们在实际中还会遇到以下情景:
部门A,B,C各自有一套Tomcat和server,通常情况下,会各自购买域名服务。从统一管理和降低成本来说,可以只需要一套域名服务。
这就需要用到Apache Server集中所有域名请求,再根据内部逻辑进行转发给相应的Tomcat server。
盗图一枚(来自取经处)
Apache Server,Tomcat都是现成的,剩下的依旧是如何配置...(为什么好产品都是美呀的写的?!)
1. 虚拟机CentOS7安装Apache HTTP Server (httpd-2.4.23)(略过)
2. Win7和虚拟机CentOS7安装Tomcat (apache-tomcat-8.5.4)(略过)(假定部门A使用CentOS7 Tomcat,部门B使用Win7 Tomcat)
3. 模拟DNS域名解析:
假定部门A,B的域名分别为www.A.com, www.B.com
由于Apache Server位于CentOS7上,修改CentOS7下的hosts文件(/etc/hosts)。
增加以下内容:
Your Apache Server IP www.A.com
Your Apache Server IP www.B.com
这样,在浏览www.A.com, www.B.com时,请求会被Apache Server接收。
4. 建立Apache Server与各个Tomcat的通信
1. Tomcat支持AJP协议,所以为Apache Server安装mod_jk以同样支持AJP。
下载tomcat-connectors-1.2.41-src.tar.gz,然后tar -zxvf...,之后参考以下命令:
cd native
./configure --with-apxs=Your Apache Server Path/bin/apxs
make
make install
检查Your Apache Server Path/modules中,是否有mod_jk.so
2. 配置mod_jk联接
在Your Apache Server Path/conf中,编辑httpd.conf。增加以下内容,
LoadModule jk_module modules/mod_jk.so JkWorkersFile conf/workers.properties JkLogFile logs/mod_jk.log
JkLogLevel emerg
JkLogStampFormat "[%a %b %d %H:%M:%S %Y] "
JkOptions +ForwardKeySize +ForwardURICompat -ForwardDirectories
JkRequestLogFormat "%w %V %T" #delegate http requests from httpd to tomcat
JkMount /tomcatlinux* tomcat-centos
JkMount /tomcatwindows* tomcat-windows
从增加内容可知,还需要在conf下创建workers.properties
3. 创建workers.properties
worker.list=tomcat-centos,tomcat-windows worker.tomcat-centos.type=ajp13
worker.tomcat-centos.port=8009
worker.tomcat-centos.host=Tomcat IP on CentOS worker.tomcat-windows.type=ajp13
worker.tomcat-windows.port=8009
worker.tomcat-windows.host=Tomcat IP on Windows
5. 根据httpd.conf中增加的JkMount部分,需要在CentOS Tomcat的webapps下添加tomcatlinux文件夹和index.html;同样在Win7 Tomcat的webapps下添加tomcatwindows文件夹和index.html。
6. 启动Apache Server和Tomcat,测试。
请求www.A.com/tomcatlinux/index.html和www.B.com/tomcatwindows/index.html
注意在本例中,所有请求是由CentOS的浏览器完成(因为/etc/hosts添加了A,B域名)
7. 以上的配置有两个问题:
1. www.B.com/tomcatlinux会访问到部门A的tomcatlinux application;而且www.A.com/tomcatwindows会访问到部门B的tomcatwindows application;
这是绝对不合理的!
2. 在请求中,包含了application名称tomcatlinux和tomcatwindows。实际中,应将application名称隐藏。
解决方案:配置Apache Server的Virtual Host。
继续编辑httpd.conf,先删掉JkMount部分,用以下部分替代。
1. 配置Virtual Host,解决问题1。
NameVirtualHost *:80 <VirtualHost *:80>
ServerName www.A.com
JkMount /tomcatlinux* tomcat-centos
</VirtualHost> <VirtualHost *:80>
ServerName www.B.com
JkMount /tomcatwindows* tomcat-windows
</VirtualHost>
2. 配置Virtual Host,解决问题1和2。
NameVirtualHost *:80 <VirtualHost *:80>
ServerName www.A.com
RewriteEngine on
RewriteLog logs/apache-mod_rewrite
RewriteRule ^/(.*)$ /tomcatlinux/$1 [L,PT]
JkMount /* tomcat-centos
</VirtualHost> <VirtualHost *:80>
ServerName www.B.com
RewriteEngine on
RewriteLog logs/apache-mod_rewrite
RewriteRule ^/(.*)$ /tomcatwindows/$1 [L,PT]
JkMount /* tomcat-windows
</VirtualHost>
请求www.A.com/index.html和www.B.com/index.html测试,效果一样。
Done!
最新文章
- webform:图片水印、验证码制作
- Hihocoder 1079 离散化
- GIL与线程互斥锁
- mysql的安装以及基本操作
- JDBC数据库编程基本流程
- UIMenuController的使用
- windows 8 系统部署IIS并发布网站
- linux的mtd架构分析【转】
- chainOfResponsibility责任链模式
- POJ 1906
- Tkinter教程之Event篇(2)
- poi对wps excel的支持
- [Reactive Programming] RxJS dynamic behavior
- PyCharm4注册码
- YARN的capacity调度器主要配置分析
- perl 正则表达式之漫游
- HDFS的接口(命令行接口和Java接口)--笔记
- [编织消息框架][JAVA核心技术]动态代理介绍
- webstorm2018.1 汉化
- 《CSS世界》读书笔记(十二)
热门文章
- yield的概念及使用姿势
- POJ3928 Ping pong
- 关于记忆力:遵从一些原则,自省增加经验,there is a way out of almost everything
- configure: error: Building GCC requires GMP 4.2+, MPFR 2.4.0+ and MPC 0.8.0+.
- c#使用椭圆签名算法制作软件序列号
- Java泛型中的类型擦除机制简单理解
- 【转】Ubuntu下出现Mysql error(2002)的解决方法
- 分布式版本号控制系统Git(二):github
- cocos2d-x-3.x bringToFront &;amp; sendToBack实现
- urllib(最基本的)库的应用