﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-Better Java,Lighter Java-文章分类-Tomcat</title><link>http://www.blogjava.net/tangyong/category/19074.html</link><description>Java,生命中的支柱!</description><language>zh-cn</language><lastBuildDate>Fri, 09 Mar 2007 03:15:16 GMT</lastBuildDate><pubDate>Fri, 09 Mar 2007 03:15:16 GMT</pubDate><ttl>60</ttl><item><title>[转载]【服务配置】apache+tomcat配置负载均衡的网站</title><link>http://www.blogjava.net/tangyong/articles/92735.html</link><dc:creator>会飞的鱼</dc:creator><author>会飞的鱼</author><pubDate>Tue, 09 Jan 2007 12:35:00 GMT</pubDate><guid>http://www.blogjava.net/tangyong/articles/92735.html</guid><wfw:comment>http://www.blogjava.net/tangyong/comments/92735.html</wfw:comment><comments>http://www.blogjava.net/tangyong/articles/92735.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/tangyong/comments/commentRss/92735.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/tangyong/services/trackbacks/92735.html</trackback:ping><description><![CDATA[
		<span class="javascript" id="text6312599" style="FONT-SIZE: 12px">
				<font face="Verdana">1. 目标 <br />使用 apache 和 tomcat 配置一个可以应用的 web 网站，要达到以下要求： <br /><br />1、 Apache 做为 HttpServer ，后面连接多个 tomcat 应用实例，并进行负载均衡。 <br /><br />2、 为系统设定 Session 超时时间，包括 Apache 和 tomcat <br /><br />3、 为系统屏蔽文件列表，包括 Apache 和 tomcat <br /><br />2. 安装 tomcat <br />2.1. 下载，解压 tomcat <br />不要下载安装版 , 下载地址 <br /><br /></font>
				<a href="http://tomcat.apache.org/" target="_blank">
						<font face="Verdana">http://tomcat.apache.org</font>
				</a>
				<font face="Verdana">
						<br />
						<br />2.2. 配置 tomcat <br />2.2.1. 配置 server 的关闭口 <br />我们需要在一台机器上跑 2 个不同的 tomcat ，需要修改不同的 tomcat 的关闭口，避免出现端口被占用的情况。在 server.xml 中找到 server, 将： <br /><br />&lt;Server port="8005" shutdown="SHUTDOWN"&gt; <br /><br />改为 <br /><br />&lt;Server port="XXXX" shutdown="SHUTDOWN"&gt; <br /><br />XXXX 在这里表示不同的端口：我的两个 tomcat 分别使用 8035 ， 8045 <br /><br /><br /><br />注意：这里之所以要配置不同的 tomcat 关闭口，只是因为我们使用了多个 tomcat ，其实用一个 server 多个实例也可以。 <br /><br />2.2.2. 配置 service <br />我们需要对不同的 tomcat 的 service 取不同的名字，在 server.xml 中找到： <br /><br />&lt;Service name="Catalina"&gt; <br /><br />改为： <br /><br />&lt;Service name="XXXX"&gt; <br /><br />两个 service 分别为 tomcat6 和 tomcat5 <br /><br />2.2.3. 配置 Connector <br />这个部分主要是要改两个 Connector ，当然前提是你的 tomcat 只有两个 Connector 。 <br /><br />修改 ajp1.3 的端口： <br /><br />找到： &lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /&gt; <br /><br />改为： &lt;Connector port="XXXX" protocol="AJP/1.3" redirectPort="8443" /&gt; <br /><br />两个 Service 的 ajp/1.3 的端口分别为： 8019 ， 8029 <br /><br />修改 http 的端口： <br /><br />找到： <br /><br />&lt;Connector port="8080" protocol="HTTP/1.1" <br /><br />maxThreads="150" connectionTimeout="20000" <br /><br />redirectPort="8443" /&gt; <br /><br />改为： <br /><br />&lt;Connector port="XXXX" protocol="HTTP/1.1" <br /><br />maxThreads="150" connectionTimeout="20000" <br /><br />redirectPort="8443" /&gt; <br /><br />两个 Service 的 ajp/1.3 的端口分别为： 8060 ， 8070 <br /><br />2.2.4. 配置 Engine <br />Engine 主要是配置 jvmRoute 属性，找到： <br /><br />&lt;Engine name="Catalina" defaultHost="localhost"&gt; <br /><br />改为： <br /><br />&lt;Engine jvmRoute="XXXX" name="Catalina" defaultHost="localhost"&gt; <br /><br />两个实例分别为： tomcat6 和 tomcat5. <br /><br />2.2.5. 配置公用性 Context <br />如果有 Context 是多个系统公用的，比如图片等的存放地，可以做个配置： <br /><br />在 Host 中增加： <br /><br />&lt;Context path="/image" docBase="D:\webRoot\image" debug="0" reloadable="false" crossContext="true"&gt; <br /><br />&lt;/Context&gt; <br /><br />2.2.6. 屏蔽文件列表 <br />打开 tomcat 目录下的 conf/web.xml ， <br /><br />找到： <br /><br />&lt;servlet&gt; <br /><br />&lt;servlet-name&gt;default&lt;/servlet-name&gt; <br /><br />&lt;servlet-class&gt;org.apache.catalina.servlets.DefaultServlet&lt;/servlet-class&gt; <br /><br />&lt;init-param&gt; <br /><br />&lt;param-name&gt;debug&lt;/param-name&gt; <br /><br />&lt;param-value&gt;0&lt;/param-value&gt; <br /><br />&lt;/init-param&gt; <br /><br />&lt;init-param&gt; <br /><br />&lt;param-name&gt;listings&lt;/param-name&gt; <br /><br />&lt;param-value&gt;true&lt;/param-value&gt; <br /><br />&lt;/init-param&gt; <br /><br />&lt;load-on-startup&gt;1&lt;/load-on-startup&gt; <br /><br />&lt;/servlet&gt; <br /><br />将 listings 参数改为 false; <br /><br />2.3. 配置应用 (web.xml) <br />对系统应用做些控制。 <br /><br />配置 session 过期时间，大多数网站用户都只是做些浏览性的操作，为了减轻服务器负载压力，我们将 session 超时时间从默认的 30 分钟变为 5 分钟。 <br /><br />在 web 应用程序的 web.xml 中 servlet-mapping 之后增加如下一段： <br /><br />&lt;session-config&gt; <br /><br />&lt;session-timeout&gt;5&lt;/session-timeout&gt; <br /><br />&lt;/session-config&gt; <br /><br />3. 安装 Apache <br />3.1. 下载、安装 Apache <br />下载地址 </font>
				<a href="http://httpd.apache.org/download.cgi" target="_blank">
						<font face="Verdana">http://httpd.apache.org/download.cgi</font>
				</a>
				<font face="Verdana">
						<br />
						<br />下载后点击安装 msi 文件。 <br /><br />安装的时候没有什么特别需要注意的地方，按照默认就行了。是否安装为 service 看具体情况而定。 <br /><br />3.2. 下载、安装 Apache 、 tomcat 的 Connector <br /></font>
				<a href="http://tomcat.apache.org/download-connectors.cgi" target="_blank">
						<font face="Verdana">http://tomcat.apache.org/download-connectors.cgi</font>
				</a>
				<font face="Verdana">
						<br />
						<br />注意，很多网站上都介绍是 JK2 ，可能是觉得 JK2 比 JK 要新吧，其实 JK2 已经停止研发了，建议使用 jk1.2 。 <br /><br />下载压缩包，之后将 module 目录中的 mod_jk-apache****.so 文件放入 /module/ 目录下。 <br /><br />3.3. 配置 Apache （ httpd.conf ） <br />3.3.1. 配置端口： <br />找到 <br /><br />Listen 80 <br /><br />改为 <br /><br />Listen ** <br /><br />当然如果不需要改的话，就不用改了。正常情况无须更改。 <br /><br />3.3.2. 配置 DocumentRoot <br />找到 DocumentRoot 段，将其改为： <br /><br />DocumentRoot "E:/MyWebsite" <br /><br />这里的 "E:/MyWebsite" 指的是你的 web 程序的根路径，视具体应用而定。 <br /><br />3.3.3. 配置 serverName <br />找到 serverName 这个段，将其配置为你的 ServerName <br /><br />如果没有配置为域名，配为 IP 也可以，此处还不是很清楚，多虚拟主机的情况的配置。 <br /><br />3.3.4. 配置虚拟主机 <br />&lt;VirtualHost *:80&gt; <br /><br />ServerAdmin </font>
				<a href="mailto:flyffa@gmail.com">
						<font face="Verdana">flyffa@gmail.com</font>
				</a>
				<font face="Verdana">
						<br />
						<br />DocumentRoot E:/MyWebsite <br /><br />ServerName localhost <br /><br />DirectoryIndex index.html index.htm index.jsp <br /><br />ErrorLog logs/error_log <br /><br />CustomLog logs/access_log common <br /><br />ErrorDocument 404 /sys/logon.jsp <br /><br />&lt;/VirtualHost&gt; <br /><br />3.4. 配置 JK 方式的负载均衡 <br />3.4.1. 配置 module <br />我们需要与 tomcat 做连接，所以要把 tomcat 的 connector 的模块配置进去。 <br /><br />在 LoadModule 部分加入： <br /><br />LoadModule jk_module modules/mod_jk-apache-2.0.55.so －加载模块 <br /><br />这个 so 是我下载的版本，个人可以根据自己下载的文件名加以配置 <br /><br />JkWorkersFile conf/workers.properties －指定 connector 的配置文件名称 <br /><br />JkLogFile logs/mod_jk.log －指定 connector 的日志文件名称 <br /><br />JkLogLevel info －指定 connector 的日志等级 <br /><br />3.4.2. 配置 worker 列表 (conf/workers.properties) <br />定义列表 <br /><br />worker.list=tomcat6,tomcat5,loadbalancer <br /><br />定义一个名为 “loadbalancer” 的 worker <br /><br />其作为对多个 Tomcat 进程的负载平衡使用： <br /><br />worker.loadbalancer.type=lb <br /><br />worker.loadbalancer.balanced_workers=tomcat5, tomcat6 <br /><br />（ 负载平衡类型的 worker 并不与 Tomcat worker 通讯，它负责管理这些 Tomcat worker 。 ） <br /><br />定义多个 worker 列表 <br /><br /># Set properties for tomcat6 (ajp13) <br /><br />worker.tomcat6.type=ajp13 <br /><br />worker.tomcat6.host=localhost <br /><br />worker.tomcat6.port=8019 <br /><br />worker.tomcat6.lbfactor=50 <br /><br />worker.tomcat6.cachesize=10 <br /><br />worker.tomcat6.cache_timeout=600 <br /><br />worker.tomcat6.socket_keepalive=1 <br /><br />worker.tomcat6.reclycle_timeout=300 <br /><br /><br /><br /># Set properties for tomcat5 (ajp13) <br /><br />worker.tomcat5.type=ajp13 <br /><br />worker.tomcat5.host=localhost <br /><br />worker.tomcat5.port=8029 <br /><br />worker.tomcat5.lbfactor=50 <br /><br />worker.tomcat5.cachesize=10 <br /><br />worker.tomcat5.cache_timeout=600 <br /><br />worker.tomcat5.socket_keepalive=1 <br /><br />worker.tomcat5.reclycle_timeout=300 <br /><br />注意： lbfactor= 50 （ 当此 Tomcat worker 被用于一个负载平衡 worker 使用时，此属性将被使用。它定义了此 worker 的负载平衡权值。 ） <br /><br />cachesize= 10 （ 当在多线程的 web server （例如 apache2.0 、 IIS 、 Netscape ）中使用 JK 时，此属性是有效的。如果将 cachesize 的值设置为较高的值，这些支持多线程的 web server 将获得很好的处理能力。如果此属性不被设置，则连接 cache 特性将失效。 ） <br /><br />3.4.3. 配置 Apache 到 tomcat 的桥接 <br />在 DocumnetRoot 片段下加入 <br /><br />JkMount /*.jsp tomcat6 <br /><br />JkMount /*.do tomcat6 <br /><br />JkMount /*Servlet tomcat6 <br /><br />这里只是简单的将 apache 的请求转到其中的一个 tomcat 中，形成桥接，至于负载均衡的时候，就无须进行这步操作，直接启动负载均衡。启动负载均衡见下一节。 <br /><br />3.4.4. 启动负载均衡 <br />在 DocumnetRoot 片段下加入 <br /><br />JkMount /*.jsp loadbalancer <br /><br />JkMount /*.do loadbalancer <br /><br />JkMount /*Servlet loadbalancer <br /><br />－指定对所有的请求启动负载均衡，这里的 loadbalancer 是定义的 worker 的名字 <br /><br />这里我在配置的时候犯了两个错误： <br /><br />第一是没有配置 JkWorkersFile conf/workers.properties ，以为 Apache 会自动认识（其实 apache 是自动产生了一个叫做 ajp13 的 worker ，指向本机的 8009 端口）。 <br /><br />第二是以为 JkMount 语句中出现 loadbalancer,ajp13 之类的是系统设定的东西，其实都是在 workers.properties 文件中定义的，结果出现名字不匹配的情况。后来配置了 JkLogFile logs/mod_jk.log 之后看到错误日志才明白。 <br /><br />3.5. 配置 Proxy 方式的负载均衡 <br />使用 Apache2.1 以上的版本，就可以用 mod_proxy_ajp 来完成负载均衡的配置，不过到目前为止，没有看到如何让 Apache 负责静态部分， tomcat 负责动态部分的配置方式，只能用 path 进行区分分发请求。如：在虚拟主机的配置中增加： <br /><br />ProxyPass / ajp://localhost:8019/ <br /><br />ProxyPassReverse / ajp://localhost:8019/ <br /><br />而形如： <br /><br />ProxyPass /*.jsp ajp://localhost:8019/ <br /><br />ProxyPassReverse /*.jsp ajp://localhost:8019/ <br /><br />这样的配置是不能通过的。 </font>
				<br />
		</span>
<img src ="http://www.blogjava.net/tangyong/aggbug/92735.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/tangyong/" target="_blank">会飞的鱼</a> 2007-01-09 20:35 <a href="http://www.blogjava.net/tangyong/articles/92735.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>