Apache与Tomcat整合的好处

  1. Apache主要用来解析静态文本,如html。Tomcat虽然也有此功能,但Apache效率大大高于Tomcat,尤其是对于并发数较大的企业级应用,能更好的显示Apache的高效率。
  2. Tomcat用来解析jsp,servlet等,所有的客户请求首先会发送到Apache,如果请求是静态文本则由Apache解析,并把结果返回给客户端,如果是动态的请求,如jsp,Apache会把解析工作交给Tomcat,由Tomcat进行解析(前提:两者现实整合),Tomcat解析完成后,结果仍是通过Tpache返回给客户端,这样就可以达到分工合作,实现负载均衡,提高系统的性能!而且因为JSP是服务器端解释代码的,这样整合可以减少Tomcat的服务开销。

整合前的准备

版本选择

为了使得整合的性能更加稳定,本次整合中apache和tomcat采用的并不是最新版本,而是相对来说比较稳定的版本。

Apache:httpd-2.2.22-win32-x86-openssl-0.9.8t.msi

Tomcat:apache-tomcat-7.0.6_1

Tomcat-connector:mod_jk-1.2.37-httpd-2.2.22.so(根据需要去网上下载对应的版本)。

注意:1.2.37:指的是连接器的版本号。

2.2.22:指的是apache的版本号。

安装目录:

本次整合用了两个tomcat。

Apache: E:\apache\apache\install(在这次整合中给它取个名字叫apache,安装目录是dirApache,目的是便于下面讲解)

Tomcat: E:\apache\tomcat\apache-tomcat-7.0.6_1(tomcat1,dirTomcat1)

E:\apache\tomcat\apache-tomcat-7.0.6_2(tomcat2,dirTomcat2)

具体整合的配置

Tomcat

配置 server 的关闭口

要在一台机器上开启两个tomcat,则需要将tomcat配置成不同的端口号。

将dirTomat1中conf/server.xml中的配置语句

<Server port="8005" shutdown="SHUTDOWN">

将其改为:

<Server port="8015" shutdown="SHUTDOWN">

dirTomcat2中的配置类推,只要port未被占用即可。

配置Service名称

本次我们运行了两个tomcat,所以要为每个tomcat取一个名字,以此来区分不同的tomcat服务器。

在dirTomcat1中conf/server.xml中找到

Service name="Catalina">

将其改为:

Service name="tomcat1">

dirTomcat2中的配置以此类推改为tomcat2.

注意:

这个名字要和dirApache下conf/ workers.properties中的worker.tomcat1对应tomcat1,tomcat2以此类推,(具体是否必须一致有待进一步确定)

配置 http访问的Connector端口

在dirTomcat1中conf/server.xml中找到

<Connector

port="8080"

protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443" />

将其改为:

<Connector

port="8080"

protocol="HTTP/1.1"

connectionTimeout="20000"

redirectPort="8443"

maxThreads="150" />

由于有两个tomcat所以其中以个采用的是默认的访问端口,即没有改变端口。

对于tomcat2,本次整合将其端口改为8090(只要访问端口没有被占用即可)

配置 AJP 1.3 Connector端口

同样打开dirTomcat1中的conf/server.xml,找到

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

将其改为:

<Connector

port="8019"

protocol="AJP/1.3"

redirectPort="8443"

maxThreads="3000"

emptySessionPath="true"

enableLookups="false"/>

注意:

后面三个绿色的配置为并发支持配置。

对于dirTomcat2以此类推。

配置 Engine

是要是添加jvmRoute 属性,找到dirTomcat1/conf.server.xml中的

<Engine name="Catalina" defaultHost="localhost">

将其改为:

<Engine jvmRoute="tomcat1" name="Catalina" defaultHost="localhost">

注意:jvmRoute与workers.properties配置的worker.tomcat1对应。

对于dirTomcat2以此类推。

配置Host

将dirTomcat1/conf.server.xml中的Host部分

<Host

name="localhost"

appBase="webapps"(tomcat默认与conf同级的)

unpackWARs="true"

autoDeploy="true">

将其改为:

<Host

name="localhost"

appBase="E:\apache\webapps"(配置自己的项目目录,便于使用)

unpackWARs="true"

autoDeploy="true">

注意:

这个设置要和apache中的虚拟主机设置相对应(即要和dieApache/conf/ extra/ httpd-vhosts.conf中的DocumentRoot和Directory对应)。

对于tomcat2以此类推

Apache

检查Apache访问端口

Apache默认访问端口:

Listen 80 只要未被占用一般不用修改。

配置apache项目目录及其虚拟目录

1)         改变apache默认目录(理论上可以不用改这个)

在dirApache/conf/httpd.conf文件中找到并配置

DocumentRoot "E:\apache\webapps"(不配置则是apache默认的项目目录,应当配置成和虚拟目录一致,并且和tomcat的虚拟目录一致)。

2)         配置apache虚拟目录

在dirApache/conf/extra/httpd-vhosts.conf文件,内容为:

NameVirtualHost localhost

<VirtualHost localhost>

ServerAdmin 229408905@qq.com

DocumentRoot "E:/apache/webapps"

ServerName localhost

JkMount /*.jsp controller

DirectoryIndex index.html index.jsp

<Directory E:/apache/webapps/>

Options -Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

<VirtualHost localhost>

ServerAdmin 229408905@qq.com

DocumentRoot "E:/apache/webapps"

ServerName localhost

JkMount /*.jsp controller

DirectoryIndex index.html index.jsp

<Directory E:/apache/webapps/>

Options -Indexes FollowSymLinks

AllowOverride None

Order allow,deny

Allow from all

</Directory>

</VirtualHost>

注意:

a)         ServerAdmin:这是在安装apache时填写的邮件信息。

b)         DocumentRoot: 这个要和tomcat中指定的目录一致。

c)         JkMount /*.jsp controller:当请求的是动态网页jsp时就将其转发到tomcat中进行解析,controller名字和在workers.properties文件中指定的controller名字一致(当apache和tomcat整合时的配置语句,不整即无需配置)。

3)         加载httpd-vhosts.conf配置文件

在dirApache/conf/httpd.conf文件中找到

# Virtual hosts

#Include conf/extra/httpd-vhosts.conf

将其改为:

# Virtual hosts

Include conf/extra/httpd-vhosts.conf

创建workers.properties配置文件

worker.list=controller

worker.controller.type=lb

worker.controller.balanced_workers=tomcat1,tomcat2

worker.controller.sticky_session=1

worker.controller.sticky_session_force=1

# Set properties for tomcat1 (ajp13)

worker.tomcat1.type=ajp13

worker.tomcat1.host=localhost

worker.tomcat1.port=8019

worker.tomcat1.lbfactor=1

# Set properties for tomcat2(ajp13)

worker.tomcat2.type=ajp13

worker.tomcat2.host=localhost

worker.tomcat2.port=8029

worker.tomcat2.lbfactor=1

注意:

1)         controller名字可以随便取,但是要与….相对应。

2)         worker.controller.balanced_workers=tomcat1,tomcat2

其中tomcat1,tomcat2要和tomcat中server.xml文件中的

<Service name="tomcat1">

或者

<Engine jvmRoute="tomcat1" name="Catalina" defaultHost="localhost">

中的一个的名字相同(测试时只要一个相同就行)。但是真正实现apache和tomcat负载均衡链接的名称是通过Engine 的jvmRoute属性来实现的连接,所以建议将以上两个名字都取成一样,这样就不会出错。

指定的名称不对应,则会报以下错误:

Service Temporarily Unavailable

The server is temporarily unable to service your request due to maintenance downtime or capacity problems. Please try again later.

意思是apache找不到项目目录。

3)        worker.tomcat1.host=localhost

要和tomcat中server.xml文件中的

<Host

name="localhost"

appBase="E:\apache\webapps"

unpackWARs="true"

autoDeploy="true">

配置语句种的=name属性对应,为服务器ip或者域名。

4)         worker.tomcat1.port的端口号为tomcat中定义的AJP 1.3 Connector端口号,如下:

<Connector

port="8019"

protocol="AJP/1.3"

redirectPort="8443"

maxThreads="3000"

emptySessionPath="true"

enableLookups="false"/>

即与上述端口号相对应。

配置Tomcat连接器

a)         将tomcat连接器mod_jk-1.2.37-httpd-2.2.22.so复制到dirApache/ modules目录下。

b)         在dirApache/conf中创建mod_jk.conf(tomcat连接器配置文件)文件,其内容为:

#多TOMCAT负载均衡整合开始

#加载mod_jk模块(tomcat连接器)

LoadModule jk_module modules/mod_jk-1.2.37-httpd-2.2.22.so

# 指定workers.properties文件(要转发到的tomcat服务器和控制器)

JkWorkersFile conf/workers.properties

#多TOMCAT负载均衡整合结束

c)         加载tomcat连接器配置文件(如果不创建这个文件,那么他的所有配置都将要直接放在httpd.conf文件中,这样不便于管理)

在dirApache/conf/httpd.conf文件最后添加如下语句,:

#加载mod_jk文件配置

include conf/mod_jk.conf

项目测试

  1. 准备一个javaweb项目,名称为ApacheAndTomcat

在项目中使用一个index.jsp页面(内容为输出一句话”jsp success!!”),并在web.xml中配置成默认项目首页为index.jsp,然后将项目放在上面的虚拟目录中

  1. 启动apache服务和tomcat服务

在页面中输入以下任意一个url:

http://localhost/ApacheAndTomcat/

http://localhost:8080/ApacheAndTomcat/

http://localhost:8090/ApacheAndTomcat/

如果内容为:

JSP success!!

表示apache和tomcat整合成功。

整合优化

线程和请求支持设置

在apache配置文件httpd.conf中找到

ThreadsPerChild 250

MaxRequestsPerChild  0

并改为:

ThreadsPerChild 1900

MaxRequestsPerChild  10000

如果没有就直接添加。

并发支持配置

在apache配置文件最后添加如下配置语句

<IfModule   worker.c>

StartServers   4

ServerLimit   64

ThreadLimit   256

MaxClients   2048

MinSpareThreads   64

MaxSpareThreads   128

ThreadsPerChild   64

MaxRequestsPerChild   0

</IfModule>

windows平台整合Apache与tomcat的更多相关文章

  1. Windows下整合apache和Tomcat

    1.前言: 引用:http://www.cnblogs.com/liaokailin/p/3963603.html 引用的博客里面有比较详细的说明,并且结合图片,非常生动: 我这里只做简单的说明和整合 ...

  2. (转)Linux整合apache和tomcat构建Web服务器

    原创作品,允许转载,转载时请务必以超链接形式标明文章 原始出处 .作者信息和本声明.否则将追究法律责任.http://wenzhongxiang.blog.51cto.com/6370734/1285 ...

  3. 在CentOS下企图整合Apache和Tomcat依然失败

    环境: 64位CentOS  Linux version 2.6.32-431.el6.x86_64 CentOS release 6.5 (Final) Apache/2.2.15,mod_jk/1 ...

  4. Windows(Vertrigo)下Apache与Tomcat的整合

    为了实现整合,上网找了很多资料!尝试了很多次,终于成功整合了!下面我就把整合过程分享给大家,希望能给以后有需要的人提供帮助. 准备工作: 1.VertrigoServ  2.23 下载地址: http ...

  5. apache和tomcat有什么不同,为什么要整合apache 和tomcat

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...

  6. 为什么要整合apache 和tomcat?

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展. 2. Apache和Tomcat都可以做为独立的web服务器来运行,但是A ...

  7. apache和tomcat有什么不同,为什么要整合apache 和tomcat?

    1. Apache是web服务器,Tomcat是应用(java)服务器,它只是一个servlet容器,是Apache的扩展.2. Apache和Tomcat都可以做为独立的web服务器来运行,但是Ap ...

  8. Windows平台整合SpringBoot+KAFKA_第1部分_环境配置部分

    项目需要,需要整合 SpringBoot+KAFKA 我调查了一下,发现Linux中,要先装zoomkeeper,再装KAFKA,如  https://blog.csdn.net/zhangcongy ...

  9. Windows平台整合SpringBoot+KAFKA__第2部分_代码编写前传

    开始准备写测试代码 看半天不太懂(我也算是小白级别的,看我搞windows版本的kafka就知道了), 看文档无聊,偶然看到一个KAFKA的windows管理程序,于是就试试就装了一个,感觉那个玩意也 ...

随机推荐

  1. python基础3

    一.文件操作:打开文件:f = open("db", "r") #只读f = open("db", "w") #只写,注 ...

  2. 记一次【求n以内的素数个数】的优化记录

    最近在leetCode上刷提,还是满锻炼人的,为以后面试打基础吧.不多说下面开始. 问题:求[2,n]之间的素数的个数. 来源:leetCode OJ 提示: Let's start with a i ...

  3. rem的使用

    浏览器的默认字体高是16px. 兼容性: 目前,IE9+,Firefox.Chrome.Safari.Opera 的主流版本都支持了rem. 对于不支持的浏览器,要多写一个绝对单位的声明,这样浏览器就 ...

  4. WordPress基础:Gravatar头像修正

    WordPress会根据你的邮箱,从Gravatar获取你的头像,如果没有在Gravatar设置头像,将使用默认的,然而设置了之后显示还可能会出现以下问题: Gravatar头像读取困难,将影响网站读 ...

  5. Hadoop - Unable to load native-hadoop library for your platform

    简介 运行hadoop或者spark(调用hdfs等)时,总出现这样的错误“Unable to load native-hadoop library for your platform”,其实是无法加 ...

  6. ECshop通过文章分类的ID实现不同模板

    当客户需要想要用不同模板来实现文章页面时,文章就需要实现调用不同模板的内容,着手点就是它的分类ID.直接通过分类ID来判断一下,现在68ecshop技术来告诉你该怎么做 方法如下所示: 一.打开根目录 ...

  7. 5.首次登陆与在线求助man page

    X Window与命令行模式的切换:通常我们也称命令行模式为终端界面(terminal或console),linux默认的情况下会提供6个Terminal来让用户登录,切换的方式为使用[Ctrl]+[ ...

  8. 使用clearInterval清除计时循环时,最后一次循环还是会执行解决办法

    原代码: var interv=setInterval(function(){ alert("setInterval执行"); },2000) clearInterval(inte ...

  9. SpringMVC原理解析-DispatcherServlet初始化以及请求处理过程

  10. 关于InvokeRequired与Invoke

    from:http://www.th7.cn/Program/net/201306/140033.shtml Windows 窗体中的控件被绑定到特定的线程,不具备线程安全性.因此,如果从另一个线程调 ...