取经自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.htmlwww.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.htmlwww.B.com/index.html测试,效果一样。

Done!

Apache Server与多个独立Tomcat集成的更多相关文章

  1. 为什么要将Apache与Tomcat集成?(或不)

    Why should I integrate Apache with Tomcat? (or not) There are many reasons to integrate Tomcat with ...

  2. apache server和tomcat集群配置二:垂直负载

    垂直负载就是同一个机器中的不同服务器之间的负载.跟水平负载(ip不一样的服务器之间的负载)的最大区别就是要修改tomcat的端口号,避免引起冲突. 还要注意apache中workers.propert ...

  3. apache server和tomcat集群配置一:水平负载

    下载apache  server,最新链接http://archive.apache.org/dist/httpd/binaries/win32 当前实验版本2.2.4 下载apache  tomca ...

  4. dubbo环境搭建与tomcat集成、DEMO示例、常见问题(最完整版本、带管理控制台、监控中心、zookeeper)

    以windows为例,linux基本相同,开发环境一般linux,个人环境一般windows(如果不开额外vm的话). 示例以dubbo官方自带demo为例子,进行整合和稍加修改测试. 0.dubbo ...

  5. Web服务器(Apache)与Servlet容器(Tomcat)

    之前一直比较迷惑Apache与Tomcat的关系,通过查询资料,有所了解,现记录于此. Apache与Tomcat 两者定位:Apache是HTTP Web服务器,Tomcat是Web容器. 有一个非 ...

  6. Spring,Struts2,MyBatis,Activiti,Maven,H2,Tomcat集成(一)——Maven,Tomcat,Spring集成

    1.  创建Maven Web工程 (1)       磁盘上创建Maven工程所需要的文件夹结构如下: (2)       在与src同级目录中创建pom.xml文件: <project xm ...

  7. springboot项目部署到独立tomcat的爬坑集锦

    目录 集锦一:普通的springboot项目直接部署jar包 集锦二:springboot项目不能直接打war包部署 集锦三:因为tomcat版本问题导致的lombok插件报错:Invalid byt ...

  8. nginx和Tomcat集成后发生的重定向问题分析和解决

    nginx和Tomcat集成后发生的重定向问题分析和解决 Tomcat前端配置一个HTTP服务器应该是大部分应用的标配了,基本思路就是所有动态请求都反向代理给后端的Tomcat,HTTP服务器来处 理 ...

  9. Apache(web服务器)与Tomcat(应用服务器)搭建集群

    web服务器:Apache.Nginx.IIS等 应用服务器:Tomcat.JBoss.Weblogic等 现在web服务器和应用服务器其实界限已经不是太清晰了,大部分的应用服务器也包含一些web服务 ...

随机推荐

  1. [CODEVS1912] 汽车加油行驶问题(分层图最短路)

    传送门 吐槽:神tm网络流 dis[i][j][k] 表示到 (i, j) 还有 k 油的最优解 然后跑spfa,中间分一大堆情况讨论 1.当前队头还有油 1.目标点有加油站——直接过去 2.目标点每 ...

  2. 刷题总结——二逼平衡树(bzoj3224线段树套splay)

    题目: Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:1.查询k在区间内的排名2.查询区间内排名为k的值3.修改某一位值上的数值4.查询k在 ...

  3. [SCOI2008]配对 (贪心,动态规划)

    题目链接 Solution 很妙的DP,很妙的贪心. 首先考虑,如果说没有那个相同的不能配对的情况; 那么我们肯定是直接排两遍序,然后一一对应即可. 但是是有限制的,同时我们可得几个条件供贪心: 每个 ...

  4. 【前端学习笔记】2015-09-02 附~~~~~ajax简单请求和获得响应结果

    首先得创建一个请求XMLHttpRequest对象,var  xmlhttp=window.XMLHttpRequest?new XMLHttpRequest() : new ActiveXObjec ...

  5. IPython:一种交互式计算和开发环境

    一 键盘快捷键 - Ctrl-P    或上箭头键 后向搜索命令历史中以当前输入的文本开头的命令 - Ctrl-N   或下箭头键 前向搜索命令历史中以当前输入的文本开头的命令 - Ctrl-R    ...

  6. 通过OpenGL ES在iOS平台实践增强现实(二)

    上一篇讲到如何使用OpenGL ES绘制一个3D场景,这一篇我们会配合使用iOS提供的CoreMotion框架把虚拟世界中的摄像机的位置朝向和设备实际的位置朝向绑定起来.本文还对防抖做了处理. 首先说 ...

  7. unity3d各平台通讯原生的平台API的说明

    注意:unity3d与原生代码的调用需要pro版本,此点注意了. 一.IOS平台,由于IOS平台的原生应该是objectC,所以通讯起来非常的简单, 1.原生代码调用u3d代码: 1.1.在Xcode ...

  8. fork()函数的执行过程、孤儿进程和僵尸进程

    说起fork就不得不提COW(Copy On Write),就是“写时拷贝”.也就是当fork发生时,子进程根本不会去拷贝父进程的内存页面,而是与父进程共享.当子进程或父进程需要修改一个内存页面时,L ...

  9. 浅谈HookSSDT和和Resume(恢复)SSDT

     最近在学HookSSDT和针对Hook的ResumeSSDT,避免自己理解有所偏差,把它们写出来,希望大家不吝赐教.(虽然已经是过时了的技术,但是最起码了解其中的原理,嘿嘿嘿.) 转载注明出处:ht ...

  10. 会话跟踪技术Cookieless

    会话跟踪技术Cookieless   在Web应用中,通常使用Cookie记录用户的状态,如用户名.访问时间等信息.当进行HTTP请求的时候,会自动发送Cookie信息给服务器.服务器接收到,就可以判 ...