Apache、Tomcat 整合配置教程
Apache、Tomcat 整合配置教程准备 相关软 件
下载 安装 Apache2.2.4
Apache 下载地址: http://archive.apache.org/dist/httpd/binaries/win32/ ,选择下载 windows 平 台安装包文件 apache_2.2.4-win32-x86-no_ssl.msi。
接受安 装协议
配置 Apache 服务器 信息
Network Domain 设置站点名称,这个不会对实际站点产生影响。 Server Name 设置当前服务器名称,这个不会对实际站点产生影响。 Administrator’s Email Address 设置站点管理员邮件地址, Apache 文档说明当站点出错时的页面底部会出现该地址。
选择安 装类型
一般选择典型(Typical)安装 选择安 装路径
这里使用默认安装路径,实际安装过程可以选择其他路径。
等待安 装过程
安装完 毕
下载 Tomcat5.5.26
Tomcat5.5.26 下载地址:http://tomcat.apache.org/download-55.cgi,选择 Core 的 zip 包。
下载 Tomcat Connector(jk.1.2.6)
Tomcat Connector 下 载 地 址 : http://www.apache.org/dist/tomcat/tomcatconnectors/jk/binaries/win32/jk-1.2.26/,此处注意一定要下载与 Apache 版本匹配的 jk。jk 文件名后半部分名称反应 Apache 的版本,如: mod_jk-1.2.26-httpd-2.2.4.so 其匹配的 Apache 为 2.2.4,与本次安装的 Apache 版本一致。
单台 主机多 站点场 景
在 一台 机器 上配 置多 个站 点, 每个 站点 有自 己独 立的 域名 。假 设服 务器 有两 个站 点 wap.abc.com 和 bbs.abc.com,两个站点分别运行在一个 tomcat 下。 为方便说明,下面分别简 称为 wap 和 bbs 站点。
Apache 配置
将 Tomcat Connector 文 件 mod_jk-1.2.26-httpd-2.2.4.so 拷 贝 到 Apache 安装 目 录 Apache2.2\modules 下。 在 Apache 配置文件 Apache2.2\conf\httpd.conf 末尾增加以下内容;
# 以下为 tomcat 集成配置部分
LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so
JkWorkersFile conf/workers.properties
# 如果机器有多个 IP 地址请务必使用 * 号
NameVirtualHost *:80
#bbs.abc.com 虚拟站点
<VirtualHost *:80>
ServerName bbs.abc.com
JkMount /*.* tomcatbbs
DirectoryIndex index.jsp
</VirtualHost>
#wap.abc.com 虚拟站点
<VirtualHost *:80>
ServerName wap.abc.com
JkMount /*.* tomcatwap
DirectoryIndex index.jsp
</VirtualHost>
Testà Configure Apache Serverà配置完成以后使用开始程序菜单目录中的 Apache HTTP Server 2.2.4 Configuration 检查 Apache 配置文件是否正确。
Tomcat Connector 配置
在 Apache 配置目录 Apache2.2\conf 创建 workers.properties 配置文件,该文件主要用于配置 Apache 与 Tomcat 的集成要用到的 Tomcat 实例。 Workers.properties 文件放置一下内容;
# 下面是 Tomcat 实例列表
worker.list=tomcatbbs,tomcatwap
#Tomcatbbs 实例配置
worker.tomcatbbs.host=127.0.0.1
worker.tomcatbbs.port=8009
worker.tomcatbbs.type=ajp13
#Tomcatwap 实例配置
worker.tomcatwap.host=127.0.0.1
worker.tomcatwap.port=9009
worker.tomcatwap.type=ajp13
Tomcat 配置
Wap 和 bbs 分别运行在两个 Tomcat 实例下,将刚才下载的 Tomcat 分别解压为两个目录 tomcatbbs 和 tomcatwap。
Tomcatbbs 实例配 置 打开 bbs 站点 tomcat 目录下的 conf\server.xml,找到下面的节点内容
<Server port="8005" shutdown="SHUTDOWN">
<!-- Define a non-SSL HTTP/1.1 Connector on port 8080 -->
<Connector port="8080" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
中间忽略 N 多注释
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
注意以上标注红色的配置,同一台机器的多个 Tomcat 不能重复使用以上端口,下半部分 AJP 的端口配置要和 workers.properties 的端口配置保持一致。 再找到 Host 节点配置更改一些内容
<!-- Define the default virtual host Note: XML Schema validation will not work with Xerces 2.2. --> <Host name="bbs.abc.com" appBase="webapps\bbs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
中间忽略 N 多注释
<!--下面是增加的内容-->
<Context docBase="." path="" reloadable="true"/>
以上第一处是配置站点域名和站点内容路径,下面增加的内容是配置站点的根路径。
Tomcatwap 实例配 置 打开 wap 站点 tomcat 目录下的 conf\server.xml,找到下面的节点内容
<Server port="9005" shutdown="SHUTDOWN">
<!-- Define a non-SSL HTTP/1.1 Connector on port 9090 -->
<Connector port="9090" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" redirectPort="8443" acceptCount="100" connectionTimeout="20000" disableUploadTimeout="true" />
中间忽略 N 多注释
<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="9009" enableLookups="false" redirectPort="8443" protocol="AJP/1.3" />
以上标注红色的配置,同一台机器的多个 Tomcat 不能重复使用以上端口,下半部分 AJP 的 端口配置要和 workers.properties 的端口配置保持一致。 请注意本次配置分别改了两个端口为 9090 和 9009。 在找到 Host 节点配置更改一些内容
<!-- Define the default virtual host Note: XML Schema validation will not work with Xerces 2.2. --> <Host name="wap.abc.com" appBase="webapps\wap" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
中间忽略 N 多注释
<!--下面是增加的内容-->
<Context docBase="." path="" reloadable="true"/>
以上第一处是配置站点域名和站点内容路径,下面增加的内容是配置站点的根路径。
常见 问题
修改 host 文件,加入 wap.abc.com,bbs.abc.com 解析至当前机器 127.0.0.1。 分别启动 Apache 和两个 Tomcat,打开两个浏览器分别输入 wap.abc.com,bbs.abc.com 测试 是否显示不同的站点内容。 Ø Ø Apache2.2\conf\httpd.conf 配置文件是否配置的两个 Host 是否配置了域名 Ø如果没有达到预期效果请检查一下几点配置: Host 中 JkMount /*.* tomcatwap 配置 tomcat 对应的 Service.xml 中配置的域名是否一致 ØWorker.properites 中配置的 tomcat 实例端口是否和对应 tomcat Service.xml 文件中的 AJP 端口是否一致 Tomcat Service.xml 配 置文 件 Host 节 点 是 否 有 <Context docBase="." path="" reloadable="true"/> Tomcat 站点内容目录下是否有 httpd.conf 文件 Host 节点中Ø配置内容 DirectoryIndex index.jsp 配置 的文件
单台 主机单 站点集 群、负载均衡
Apache 配置
将 Tomcat Connector 文 件 mod_jk-1.2.26-httpd-2.2.4.so 拷 贝 到 Apache 安装 目 录 Apache2.2\modules 下。 在 Apache 安装目录找到 conf/httpd.conf 文件,在末尾增加一下内容 #以下为 tomcat 集成配置部分 LoadModule jk_module modules/mod_jk-1.2.26-httpd-2.2.4.so JkWorkersFile conf/workers.properties JkMount /*.* lbcontroller 找到下面配置,将默认目录文件 index.html 改为 index.jsp <IfModule dir_module> DirectoryIndex index.jsp </IfModule>
Tomcat Connector 配置
在 Apache 配置目录 Apache2.2\conf 创建 workers.properties 配置文件,该文件主要用于配置 Apache 与 Tomcat 的集成要用到的 Tomcat 实例和负载均衡分发控制器。 Workers.properties 文件放置一下内容;
#下面是分发控制器 注意不要放 tomcat 实例 worker.list=lbcontroller #Tomcat1 实例配置 这里要和 Tomcat 配置文件 Service.xml 的 c保持一致 worker.tomcat1.host=127.0.0.1 worker.tomcat1.port=8009 worker.tomcat1.type=ajp13 #分发权重 值越大负载越大 worker.tomcat1.lbfactor = 1 #Tomcat2 实例配置 worker.tomcat2.host=127.0.0.1 worker.tomcat2.port=9009 worker.tomcat2.type=ajp13 #分发权重 值越大负载越大 worker.tomcat2.lbfactor = 1 #负载均衡分发控制器 worker.lbcontroller.type=lb worker.lbcontroller.balance_workers=tomcat1,tomcat2
Tomcat 配置
Tomcat 配置文件 Service.xml 主要注意两个地方,一个是 Engine 节点需要增加节点标识 jvmRoute,一个是将原本注释掉的 Session 复制节点改为有效。具体如下
<!-- Define the top level container in our container hierarchy --> <!--jvmRoute 在各个 Tomcat 配置中不能重复且要与 worker.properties 文件中的名称一致--> <Engine name="Catalina" defaultHost="localhost" jvmRoute=" tomcat1"> <!—每个 Tomcat 的 Hostname 必须一样 <Host name="bbs.abc.com" appBase="webapps\bbs" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false"> 这里省略 N 多注释将下面的注释变去掉 <!-<Cluster className="org.apache.catalina.cluster.tcp.SimpleTcpCluster" managerClassName="org.apache.catalina.cluster.session.DeltaManager" expireSessionsOnShutdown="false" useDirtyFlag="true" notifyListenersOnReplication="true"> <Membership className="org.apache.catalina.cluster.mcast.McastService" mcastAddr="228.0.0.4" mcastPort="45564" mcastFrequency="500" mcastDropTime="3000"/> <!—接收端口在各个 Tomcat 配置中不能重复--> <Receiver className="org.apache.catalina.cluster.tcp.ReplicationListener" tcpListenAddress="auto" tcpListenPort="4001" tcpSelectorTimeout="100" tcpThreadCount="6"/> <Sender className="org.apache.catalina.cluster.tcp.ReplicationTransmitter" replicationMode="pooled" ackTimeout="15000" waitForAck="true"/> <Valve className="org.apache.catalina.cluster.tcp.ReplicationValve" filter=".*\.gif;.*\.js;.*\.jpg;.*\.png;.*\.htm;.*\.html;.*\.css;.*\.txt;"/> <Deployer className="org.apache.catalina.cluster.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-listen/" watchEnabled="false"/> <ClusterListener className="org.apache.catalina.cluster.session.ClusterSessionListener"/> </Cluster> --> <!—Host 节点增加一下内容表示站点根路径--> <Context docBase="." path="" reloadable="true"/>
我们分别将两个 Tomcat 配置文件中的 jvmRoute 设置为 tomcat1、tomcat2,Server 节点 端口 分 别 配 置 为 8005 和 9005 ,集 群 Receiver 节 点 tcpListenPort 端口 分 别 配 置 为 4001 和 4002,Connector 节点端口分别配置为 8080 和 9090,AJPConnector 端口分别配置为 8009 和 9009,Connector 端口配置参照单主机多站点场景。 请注意两个 Tomcat 配置文件 Host 节点的 域名配置必须一样, Server.xml 中的 jvmRoute 名称必须和 worker.properties 中的 tomcat 实例 名称一致,不然无法实现 session_stricky。
Web.xml 配置
Web.xml 配置文件加上<distributable/>节点,此配置说明当前 Web 工程处于分布式部署环境。 如果不进行这个配置,每次访问页面 tomcat 都会产生一个新的 sessionid。
常见 问题
修改 Host 文件将 bbs.abc.com 解析到本机。打开两个 IE 窗口分别提交 session 操作,然后在 控制台观察效果。 正常情况为;同一个 IE 窗口的所有请求都分发到同一个 Tomcat ,当关闭其中一个 ApacheØTomcat 时,IE 窗口重新请求会分发到另一个 Tomat 并且 Session 保持同步。 如果没有达到预期效果请检查一下几点; Apache 配置文件中 JkMountØ Ø Ø Ø Ø配置文件中 DirectoryIndex 配置的文件是否存在 tomcat 应用的目录下 是否分发到负责均衡控制器 两个 Tomcat 端口是否有重复, Worker.properties 中 tomcat 端口是否和对应 server.xmlAJPConnector 端口一致 Server.xml 配置文件的 Host 节点 name 属性是否一致 Server.xml Server.xmlHostØ配置文件的 Engine 节点是否配置 jvnRoute,并且与 worker.properties 配置的 名称保持一致 节点内的 Cluster 节点是否设置为有效
页:
[1]