tomcat与IIS整合的几个小问题浅谈
[
2006/07/08 14:33 | by
zmoon ]
tomcat与IIS整合的几个小问题浅谈
我实践中讨论的IIS为6.0 tomcat为5.0.28 isapi_redirect.dll 为1.2.15版本,以下大部分为实际使用之理解所得
先假设大家都按常规方法安装配置好了tomcat和IIS及相应的jsp虚拟主机设置,还有isapi在IIS6中的常规配置
isapi强烈建议使用msi的安装包来装,无需修改注册表,且2个配置文件安装好后就存在安装目录的conf子目录下面了。
这两个配置文件是
uriworkermap.properties
workers.properties.minimal
如果要修改 worker配置 请把workers.properties.minimal改名为workers.properties
我需要修改的就是添加一行,改善大负载站点的性能问题
大负载下出现的错误会在isapi安装目录的log目录下面看到日至记录
worker.ajp13w.cachesize=327680
关于cachesize:
当 在多线程的web server(例如apache2.0、IIS 、Netscape)中使用JK时,此属性是有效的。如果将cachesize的值设置为较高的值,这些支持多线程的web server将获得很好的处理能力。如果此属性不被设置,则连接cache特性将失效。
而另外一个关键文件 uriworkermap.properties 默认内容如下 是我们这次讨论的重点 :)
# uriworkermap.properties - IIS
#
# This file provides sample mappings for example wlb
# worker defined in workermap.properties.minimal
# The general syntax for this file is:
# [URL]=[Worker name]
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
# Optionally filter out all .jpeg files inside that context
# For no mapping the url has to start with exclamation (!)
!/servlets-examples/*.jpeg=wlb
#
# Mount jkstatus to /jkmanager
# For production servers you will need to
# secure the access to the /jkmanager url
#
/jkmanager=jkstatus
就是说默认情况下 IIS收到请求后只把默认站点的几个子目录交给tomcat处理,这是无法实际使用的
我们需要把 jsp文件交给tomcat处理 所以 添加一行 /*.jsp=wlb 后重新启动IIS,你会发现一个郁闷无比的问题:
如果你输入 www.123.com 会出现一个错误,错误内容取决于你的IIS设置, 如果你没有在IIS的 网站-主目录-配置(应用程序配置)中添加 应用程序扩展 .jsp ->isapi_redirect.dll 的话 应该是404文件找不到的错误
如果是IIS中添加了上述扩展且IIS默认文档有index.jsp,可能能够在iis的log中看到500错误,IE中可能是空白或者该页无法显示--显然iis去执行index.jsp出错了
顺便说一句IIS中的jsp站点既不需要做 应用程序扩展 也不需要添加index.jsp作为默认页面,原因很简单,不需要做应用程序扩展是本人实践 所得 :) ,不需要添加index.jsp 是因为所有jsp文件IIS都交给tomcat去了,使用什么样的默认页面文件应该是在tomcat的web.xml中 设置。
如果你说 我访问 http://www.123.com/ 根本就没有.jsp的URL,怎么会交给TOMCAT呢?
呵呵 这就是问题关键所在,上面不是说访问 www.123.com会出现一个错误么,你说的此乃正解 :),
如果我访问 http://www.123.com/index.j... 会完全正常,就是说必须在url要带.jsp的请求,tomcat 才能处理
实际中这显然是不现实的,你不可能希望客户能够给你在浏览器中添加个index.jsp吧,这样就需要使用 index.html来跳转到index.jsp,但这也不是根本解决之道,不可能每个有index.jsp的目录都添加个index.html吧?
于是来个小小的改变,把上面配置的 /*.jsp=wlb 改为 /*=wlb 看看,恩 JSP站点完全正常了
但是 现在变成所有的url请求都交给tomcat处理了,包括图片动画视频文件等等,你可以在tomcat的网站log中看到,tomcat本来处理静态内容就是差,把所有都交给它,产生两个问题:
一: 显然,比起通过IIS直接处理静态url请求的 图片动画或者视频不是速度更慢了么?
二: 由于所有url都通过tomcat处理,导致IIS中建立的虚拟主机ASP站点必须要在TOMCAT也建立一个同样的虚拟主机站点,一个asp站点也要通过tomcat来,是维护上还是性能上,不是更麻烦和不合理么?
如何解决??
1: 把JSP站点相关的静态请求比如图片gif jpg rar avi swf 等等尽可能交给IIS处理
在配置文件中添加如下内容
!/*.jpg=wlb
!/*.asp=wlb
!/*.gif=wlb
!/*.js=wlb
!/*.swf=wlb
!/*.png=wlb
!/*.htm=wlb
!/*.html=wlb
!/*.rar=wlb
!/*.zip=wlb
!/*.avi=wlb
!/*.rmvb=wlb
就是说把这些请求都交给IIS来处理,降低tomcat的工作量
2: 把ISAPI筛选器 配置到每一个需要支持jsp的站点,而不是配置到IIS的全局设置中,这样实现了
IIS中的没有配置为支持JSP的站点,就会与ISAPI与TOMCAT都没有任何关系,这点应该。
当然,个人觉得最完美的方式还是只把jsp文件或者指定的目录交给tomcat处理,就是说用/*.jsp 方式
但是前提是有人能够告诉我如何解决 访问 www.123.com时默认页面的处理问题,有人提到修改tomcat的conf目录中的jk2.properties 添加 request.tomcatAuthentication=false 但是星星实践了一下,毫无用处 。
往往几个小问题让人挠头半天,的确是...... 希望大家对这些感兴趣的,看了此文后能有所收获
更新:
在workers.properties添加一行
connection_pool_size=800
改善下面的错误
[Tue Nov 14 11:08:30 2006] [info] jk_ajp_common.c (2152): can't find free endpoint
[Tue Nov 14 11:08:30 2006] [warn] jk_ajp_common.c (2138): Unable to get the free endpoint for worker wlb from 10 slots
[Tue Nov 14 11:08:30 2006] [info] jk_ajp_common.c (2152): can't find free endpoint
[Tue Nov 14 11:08:30 2006] [warn] jk_ajp_common.c (2138): Unable to get the free endpoint for worker wlb from 10 slots
[Tue Nov 14 11:08:30 2006] [info] jk_ajp_common.c (2152): can't find free endpoint
我实践中讨论的IIS为6.0 tomcat为5.0.28 isapi_redirect.dll 为1.2.15版本,以下大部分为实际使用之理解所得
先假设大家都按常规方法安装配置好了tomcat和IIS及相应的jsp虚拟主机设置,还有isapi在IIS6中的常规配置
isapi强烈建议使用msi的安装包来装,无需修改注册表,且2个配置文件安装好后就存在安装目录的conf子目录下面了。
这两个配置文件是
uriworkermap.properties
workers.properties.minimal
如果要修改 worker配置 请把workers.properties.minimal改名为workers.properties
我需要修改的就是添加一行,改善大负载站点的性能问题
大负载下出现的错误会在isapi安装目录的log目录下面看到日至记录
worker.ajp13w.cachesize=327680
关于cachesize:
当 在多线程的web server(例如apache2.0、IIS 、Netscape)中使用JK时,此属性是有效的。如果将cachesize的值设置为较高的值,这些支持多线程的web server将获得很好的处理能力。如果此属性不被设置,则连接cache特性将失效。
而另外一个关键文件 uriworkermap.properties 默认内容如下 是我们这次讨论的重点 :)
# uriworkermap.properties - IIS
#
# This file provides sample mappings for example wlb
# worker defined in workermap.properties.minimal
# The general syntax for this file is:
# [URL]=[Worker name]
/admin/*=wlb
/manager/*=wlb
/jsp-examples/*=wlb
/servlets-examples/*=wlb
# Optionally filter out all .jpeg files inside that context
# For no mapping the url has to start with exclamation (!)
!/servlets-examples/*.jpeg=wlb
#
# Mount jkstatus to /jkmanager
# For production servers you will need to
# secure the access to the /jkmanager url
#
/jkmanager=jkstatus
就是说默认情况下 IIS收到请求后只把默认站点的几个子目录交给tomcat处理,这是无法实际使用的
我们需要把 jsp文件交给tomcat处理 所以 添加一行 /*.jsp=wlb 后重新启动IIS,你会发现一个郁闷无比的问题:
如果你输入 www.123.com 会出现一个错误,错误内容取决于你的IIS设置, 如果你没有在IIS的 网站-主目录-配置(应用程序配置)中添加 应用程序扩展 .jsp ->isapi_redirect.dll 的话 应该是404文件找不到的错误
如果是IIS中添加了上述扩展且IIS默认文档有index.jsp,可能能够在iis的log中看到500错误,IE中可能是空白或者该页无法显示--显然iis去执行index.jsp出错了
顺便说一句IIS中的jsp站点既不需要做 应用程序扩展 也不需要添加index.jsp作为默认页面,原因很简单,不需要做应用程序扩展是本人实践 所得 :) ,不需要添加index.jsp 是因为所有jsp文件IIS都交给tomcat去了,使用什么样的默认页面文件应该是在tomcat的web.xml中 设置。
如果你说 我访问 http://www.123.com/ 根本就没有.jsp的URL,怎么会交给TOMCAT呢?
呵呵 这就是问题关键所在,上面不是说访问 www.123.com会出现一个错误么,你说的此乃正解 :),
如果我访问 http://www.123.com/index.j... 会完全正常,就是说必须在url要带.jsp的请求,tomcat 才能处理
实际中这显然是不现实的,你不可能希望客户能够给你在浏览器中添加个index.jsp吧,这样就需要使用 index.html来跳转到index.jsp,但这也不是根本解决之道,不可能每个有index.jsp的目录都添加个index.html吧?
于是来个小小的改变,把上面配置的 /*.jsp=wlb 改为 /*=wlb 看看,恩 JSP站点完全正常了
但是 现在变成所有的url请求都交给tomcat处理了,包括图片动画视频文件等等,你可以在tomcat的网站log中看到,tomcat本来处理静态内容就是差,把所有都交给它,产生两个问题:
一: 显然,比起通过IIS直接处理静态url请求的 图片动画或者视频不是速度更慢了么?
二: 由于所有url都通过tomcat处理,导致IIS中建立的虚拟主机ASP站点必须要在TOMCAT也建立一个同样的虚拟主机站点,一个asp站点也要通过tomcat来,是维护上还是性能上,不是更麻烦和不合理么?
如何解决??
1: 把JSP站点相关的静态请求比如图片gif jpg rar avi swf 等等尽可能交给IIS处理
在配置文件中添加如下内容
!/*.jpg=wlb
!/*.asp=wlb
!/*.gif=wlb
!/*.js=wlb
!/*.swf=wlb
!/*.png=wlb
!/*.htm=wlb
!/*.html=wlb
!/*.rar=wlb
!/*.zip=wlb
!/*.avi=wlb
!/*.rmvb=wlb
就是说把这些请求都交给IIS来处理,降低tomcat的工作量
2: 把ISAPI筛选器 配置到每一个需要支持jsp的站点,而不是配置到IIS的全局设置中,这样实现了
IIS中的没有配置为支持JSP的站点,就会与ISAPI与TOMCAT都没有任何关系,这点应该。
当然,个人觉得最完美的方式还是只把jsp文件或者指定的目录交给tomcat处理,就是说用/*.jsp 方式
但是前提是有人能够告诉我如何解决 访问 www.123.com时默认页面的处理问题,有人提到修改tomcat的conf目录中的jk2.properties 添加 request.tomcatAuthentication=false 但是星星实践了一下,毫无用处 。
往往几个小问题让人挠头半天,的确是...... 希望大家对这些感兴趣的,看了此文后能有所收获
更新:
在workers.properties添加一行
connection_pool_size=800
改善下面的错误
[Tue Nov 14 11:08:30 2006] [info] jk_ajp_common.c (2152): can't find free endpoint
[Tue Nov 14 11:08:30 2006] [warn] jk_ajp_common.c (2138): Unable to get the free endpoint for worker wlb from 10 slots
[Tue Nov 14 11:08:30 2006] [info] jk_ajp_common.c (2152): can't find free endpoint
[Tue Nov 14 11:08:30 2006] [warn] jk_ajp_common.c (2138): Unable to get the free endpoint for worker wlb from 10 slots
[Tue Nov 14 11:08:30 2006] [info] jk_ajp_common.c (2152): can't find free endpoint