Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)
一、简介
在项目中,几乎任何一个项目都包括静态资源和动态请求两大部分。特别对于门户网站这样的项目,静态内容资源会更多,我们使用一般的 Tomcat 部署时,Tomcat 对静态资源的处理能力比较慢,至少比 Apache 要慢很多。
为了提高项目的访问速度,降低服务器负载提高性能,我们使用Apache来处理静态资源,把动态资源和请求交给 Tomcat 处理。
当然,在单纯处理并发和静态资源指标方面,Nginx要比Apache好,至于Nginx和Apache的具体区别,以及什么项目使用Nginx、什么项目适合用Apache,异或是使用Nginx加Apache一起使用…… 这个不是本文要探讨的范围,这两个开源项目各有优缺点,大家可以针对自己项目选择合适的方案。
本文就简单的对Apache和Tomcat如何集成,进行实际配置进行说明:
apache与tomcat负载集群集成方法有3种jk、jk_proxy、http_proxy
二、mod_proxy 和 mod_jk 的比较
那么什么时候使用哪一个呢?这依赖于你的架构。如果你已经有了或者需要apache 2.2的功能,那么你可以再mod_proxy和mod_jk直接选择。mod_jk在apache2.2上允许得很好。关键看你需要什么样的功能:
mod_proxy
--------------
优势:
不需要编译和维护一个对立的模块。mod_proxy,mod_proxy_http,mod_proxy_ajp,mod_proxy_balancer已经是apache 2.2+的标准集成部分;
可以使用http、https和AJP协议,即便是在同一个balancer中。
劣势:
mod_proxy_ajp不支持大于8k的数据包;
只有最基本的负载均衡器;
不支持域模型集群(domain model clustering)
mod_jk
--------------
优势:
先进的负载均衡器;
先进的节点失败侦察功能;
支持大型AJP 数据包
劣势:
需要单独维护一个独立的模块;
我个人建议是如果有能力维护mod_jk模块的二进制版本,尽量使用mod_jk。mod_proxy一直在更新但还缺少一些mod_jk的功能。但是,如果你需要https和一个简单的负载均衡就是用mod_proxy.
三、实践
1、下载安装 Apache (本文忽略)
2、下载安装 Tomcat (本文忽略)
3、下载 mod_jk 安装包
下载连接Apache和Tomcat(mod_jk) 的包 tomcat-connectors-1.2.41-src.tar.gz
官网下载地址:http://tomcat.apache.org/download-connectors.cgi
4、安装 mod_jk
5、配置Apache相关参数文件
1) 配置 mod_jk 模块
刚刚安装了mod_jk 模块,也已经拷贝到Apache的模块目录中,下面就是让Apache来支持它。
需要在Apache的conf目录下新建配置文件:
workers.properties #定义Tomcat工作的的配置文件
mod_jk.conf #定义mod_jk 的配置文件
# cd /usr/local/apache2/conf/
# vi mod_jk.conf
# vi workers.properties
<span style="font-size:12px;">#指定需要工作的tomcat节点,如多个用“,”分割
worker.list=worker_web,worker_wap
####################################################################
worker.worker_web.type=ajp13 #指定worker_web使用ajp13协议与Tomcat进程通讯
worker.worker_web.host=localhost #指定worker_web的位置,如果不是本机,就配置IP地址
worker.worker_web.port= #指定worker_web的工作端口
worker.worker_web.socket_keepalive= #此配置项为当Apache和Tomcat之间有防火墙时,让os每隔多久想未激活的连接发送KEEP_ALIVE信息,防止防火墙切断未激活的网络连接
worker.worker_web.socket_timeout= #指定worker_web上的连接在未激活的状况下持续多久,Apache将主动切断 ####################################################################
worker.worker_wap.type=ajp13
worker.worker_wap.host=localhost
worker.worker_wap.port=
worker.worker_wap.socket_keepalive=
worker.worker_wap.socket_timeout=</span>
2) 修改 Apache 的主配置文件 httpd.conf 配置多个虚拟主机
a) 找到 Include conf/extra/httpd-vhosts.conf 去掉前面的 “#”
b) vi conf/extra/httpd-vhosts.conf
<span style="font-size:12px;">########################################################
LoadModule jk_module modules/mod_jk.so
Include conf/mod_jk.conf
########################################################
<VirtualHost *:>
#ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/svcroot/runtime/webstatic/shanhyweb"
ServerName shanhyweb.example.com
#ServerAlias www.shanhyweb.example.com
ErrorLog "logs/shanhyweb-error_log"
CustomLog "logs/shanhyweb-access_log" common
<IfModule mod_jk.c>
#日志输出文件(其他配置也可以重写mod_jk.conf里面的配置)
JkLogFile logs/mod_jk_shanhyweb.log
#指URL指向如果有servlet,则让worker_web去处理
JkMount /servlet/* worker_web
#指URL为/*.jsp的页面,让worker_web去处理
JkMount /*.jsp worker_web
#指URL为/*.do的页面,让worker_web去处理
JkMount /*.do worker_web
#指URL为/*.json的页面,让worker_web去处理
JkMount /*.json worker_web
</IfModule>
<Directory "/svcroot/runtime/webstatic/shanhyweb">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost> <VirtualHost *:80>
#ServerAdmin webmaster@dummy-host.example.com
DocumentRoot "/svcroot/runtime/webstatic/shanhywap"
ServerName shanhywap.example.com
#ServerAlias www.shanhywap.example.com
ErrorLog "logs/shanhywap-error_log"
CustomLog "logs/shanhywap-access_log" common
<IfModule mod_jk.c>
#日志输出文件(其他配置也可以重写mod_jk.conf里面的配置)
JkLogFile logs/mod_jk_shanhywap.log
#指URL指向如果有servlet,则让worker_wap去处理
JkMount /servlet/* worker_wap
#指URL为/*.jsp的页面,让worker_wap去处理
JkMount /*.jsp worker_wap
#指URL为/*.do的页面,让worker_wap去处理
JkMount /*.do worker_wap
#指URL为/*.json的页面,让worker_wap去处理
JkMount /*.json worker_wap
</IfModule>
<Directory "/svcroot/runtime/webstatic/shanhywap">
Options FollowSymLinks
AllowOverride None
Require all granted
</Directory>
</VirtualHost></span>
配置文件中 /svcroot/runtime/webstatic/shanhyweb 和 /svcroot/runtime/webstatic/shanhywap 分别为web和wap的静态资源目录
配置文件中 worker_web 和 worker_wap 为我们2个处理不同业务的 Tomcat
6、 配置web的Tomcat 和wap 的Tomcat
我在/app/webserver 目录下放了2个tomcat,分别是 apache-tomcat-7.0.63-wap 和 apache-tomcat-7.0.63-web
修改 apache-tomcat-7.0.63-wap/conf/server.xml 中的ajp 端口为8109,http端口为 8180,server 端口为8105
在 apache-tomcat-7.0.63-wap/conf/server.xml 的最下面的 </Host> 上面一行添加:
<Context path="" docBase="/svcroot/runtime/webinterface/shanhywap" reloadable="true" distributable="true"/>
在 apache-tomcat-7.0.63-web/conf/server.xml 的最下面的 </Host> 上面一行添加:
<Context path="" docBase="/svcroot/runtime/webinterface/shanhyweb" reloadable="true" distributable="true"/>
7、重启相关服务
重启Apache 服务,并启动web和wap的tomcat 服务。
8、测试
修改本机 C:\Windows\System32\drivers\etc 目录下的 hosts 文件,在最后添加:
192.168.19.130 shanhyweb.example.com
192.168.19.130 shanhywap.example.com
其中 192.168.19.130 为我们上面配置的Linux 服务的IP地址。
服务器上静态资源文件:
/svcroot/runtime/webstatic/shanhywap/index.html 内容为 This is my page. ShanhyWap-Static.
/svcroot/runtime/webstatic/shanhyweb/index.html 内容为 This is my page. ShanhyWeb-Static.
服务器上2个Tomcat 配置的项目中的 jsp 测试文件:
/svcroot/runtime/webinterface/shanhywap/test.jsp 内容为 ShanhyWap Content.
/svcroot/runtime/webinterface/shanhyweb/test.jsp 内容为 ShanhyWeb Content.
访问地址测试:
访问:http://shanhywap.example.com 后网页显示 This is my page. ShanhyWap-Static.
访问:http://shanhyweb.example.com 后网页显示 This is my page. ShanhyWeb-Static.
访问:http://shanhywap.example.com/test.jsp 后网页显示 ShanhyWap Content.
访问:http://shanhywap.example.com/test.jsp 后网页显示 ShanhyWeb Content.
9、相关文件
最后列出本问整合涉及到的相关文件目录位置:
apache 安装目录 /usr/local/apache2
apache 相关配置文件:
/usr/local/apache2/conf/httpd.conf
/usr/local/apache2/conf/mod_jk.conf
/usr/local/apache2/conf/workers.properties
/usr/local/apache2/conf/extra/httpd-vhosts.conf
webserver 的2个Tomcat 目录:
/app/webserver/apache-tomcat-7.0.63-wap
/app/webserver/apache-tomcat-7.0.63-web
webinterface 程序目录(2个Tomcat分别对应的项目工程) :
/svcroot/runtime/webinterface/shanhyweb
-- test.jsp
/svcroot/runtime/webinterface/shanhywap
-- test.jsp
webstatic 静态资源目录
/svcroot/runtime/webstatic/shanhyweb
-- index.html
/svcroot/runtime/webstatic/shanhywap
-- index.html
************************************************************************
题外话说一下我的目录归类,我的 /svcroot 目录目录结构如下:
/svcroot
-- runtime
-- standalone(存放Java程序)
-- webinterface(存放Tomcat对应的项目工程)
-- webstatic(存放项目工程的静态资源)
-- workspace
-- build(hudson custom 目录,SVN 代码)
-- shanhyweb-source
-- shanhywap-source
-- shanhyAndroid-source
-- dist(build编译后的文件目录,待发布)
-- logs(项目相关logs)
--------------------------
(完)
转载地址:http://blog.csdn.net/catoop/article/details/47974773
访问:http://shanhywap.example.com 后网页显示 This is my page. ShanhyWap-Static.
访问:http://shanhyweb.example.com 后网页显示 This is my page. ShanhyWeb-Static.
Apache和Tomcat整合(一个Apache 不同域名处理多个不同业务)的更多相关文章
- Apache与Tomcat整合
Apache与Tomcat整合 一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache ...
- Apache与Tomcat整合(转)
一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由 ...
- [WebServer] Linux下Apache与Tomcat整合的简单方法
Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由to ...
- linux下apache和tomcat整合
一 Apache与Tomcat比较联系 apache支持静态页,tomcat支持动态的,比如servlet等. 一般使用apache+tomcat的话,apache只是作为一个转发,对jsp的处理是由 ...
- Apache 与 Tomcat 整合
目标 1.同一台机器上,不同的域名指向,访问不同的项目,即: (1)one.test.com 访问 project_one (2) two.test.com 访问 project_two 2.将T ...
- debian下Apache和tomcat整合(使用apt工具)
最近部署web系统,需要使用tomcat处理和Apache整合使用,tomcat处理JSP,Apache处理静态资源.开始不知道怎么操作,在网上查阅资料走了很多弯路.完成时候,发现其实很简单,现将配置 ...
- apache 和 php 整合、apache配制虚拟机
如何 把apache 和 php 整合起来 ? (关闭防火墙或在防火墙内添加80端口,关闭selinux) 修改:apache的配制文件:/usr/local/apache2.4/conf/h ...
- Apache与Tomcat整合的配置
下载jk连接器地址:http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/ 把jk连接器即“mod_j ...
- windows平台整合Apache与tomcat
Apache与Tomcat整合的好处 Apache主要用来解析静态文本,如html.Tomcat虽然也有此功能,但Apache效率大大高于Tomcat,尤其是对于并发数较大的企业级应用,能更好的显示A ...
随机推荐
- Maven下载、安装和配置(二)
前言 在上篇博文[项目管理和构建]--Maven简介(一)中我们了解到maven是一种全新的项目构建方式,让我们的开发更加简单,高效.Maven主要做的是两件事: 统一开发规范与工具 统一管理jar包 ...
- 记一次【模拟点击】,WinForm小软件开发过程
前言 年初四月份的时候,有朋友找到我,说想开发一个模拟点击的软件.最终软件做完后,发现效果不理想.唯一开发的我是认为最好是放弃了,做运营的他,坚持说这个没问题,说是改变合作方式.最终也是不了了之了. ...
- 微软云linux服务器FTP文件传输错误解决办法
在微软云上新建了linux虚拟机之后,通过Xshell连接到服务器(微软云默认的账号是:azureuser,不是root),却发现通过FTP传输文件错误,一直找不到头绪,询问微软云相关人员才知道.FT ...
- mvc一对多模型表单的快速构建
功能需求描述 Q:在实际的开发中,经常会遇到一个模型中包含有多个条目的表单.如何将数据提交到后台? A: 以数组的形式提交到后台就Ok了(真的那么简单么,如果再嵌套一层呢?) A2:拆分多个模型,映射 ...
- wget下载整个网站
wget下载整个网站wget下载整个网站可以使用下面的命令 wget -r -p -k -np http://hi.baidu.com/phps , -r 表示递归下载,会下载所有的链接,不过要注意的 ...
- QCW切割 --铁片
1.QCW切割旋转轴限位部件 --刘锦峰协助 :铁片 功率85% 最大功率100 最小功率50 脉宽0.1ms 调整焦点-0.5左右
- PHP常用数组(Array)函数整理
整理了一份PHP开发中数组操作大全,包含有数组操作的基本函数.数组的分段和填充.数组与栈.数组与列队.回调函数.排序.计算.其他的数组函数等. 一.数组操作的基本函数 数组的键名和值 array_va ...
- 【模版】AC自动机(简单版)
题目背景 这是一道简单的AC自动机模版题. 用于检测正确性以及算法常数. 为了防止卡OJ,在保证正确的基础上只有两组数据,请不要恶意提交. 题目描述 给定n个模式串和1个文本串,求有多少个模式串在文本 ...
- ch4-计算属性(表达式计算 computed methods watchers)
1 计算属性 1.1 模板内的表达式是非常便利的,但是它们实际上只用于简单的运算. 在模板中放入太多的逻辑会让模板过重且难以维护. <div id="test1"> { ...
- 【转】Python正则表达式指南
1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十 ...