场景
需要在客户服务器上进行
项目
部署实施:
- 客户提供的服务器只有Windows平台;
- 客户可提供的二级域名有限,或无法提供二级域名;
- 服务器所在网络监管很严格,一般只开放80服务端口(如需开放其他端口则需要较长审批流程),无法通过VPN或FTP方式进行后期系统维护;
客户服务器环境为:
- Windows 2003
- IIS 6.0(.Net Frameworks 2.0+)
项目部署环境要求:
- Java 1.6+
- Tomcat 6.0+
- MySQL
解决方案
1.准备工作
1.1 通过Google搜索解决方案:
文章[
1]所述仅供参考(
你也知道国内的技术文章水平大致是怎样的),但:
不建议采用 注册表 方式来配置 isapi_redirector.dll 的相关属性,而是使用properties文件形式。即将isapi_redirector.properties 文件放置在和 isapi_redirector.dll 同一目录下。这样便于多个站点使用不同的 isapi_redirector 配置。
对于 workers.properties 和 uriworkermap.properties 建议详细参考 Apache Tomcat Connector 的文档[2]。
1.2 在本地搭建模拟部署实施环境 - IIS上搭建项目部署所需环境准备工作如下:
- JDK 环境搭建 - 注意增加系统环境变量中JAVA_HOME
- 建立网站根目录(一般用来放置所有静态资源) - path\to\project-deploy\example.com
- 建立项目应用服务文件夹 - path\to\project-deploy\system-packages
- 下载 Tomcat 并放置在项目文件夹下 path\to\project-deploy\tomcat6-server
- 下载 isapi_redirector.dll 并放置在项目文件夹下 path\to\project-deploy\isapi-redirector
最终目录结果如下图所示(建议在本地模拟环境及客户服务器部署环境中使用类似方式组织项目,便于后期维护):
![](https://i-blog.csdnimg.cn/blog_migrate/5940dabf40b2ba88d43b3aa5e043ef9f.png)
2.模拟环境搭建
2.1 建立 IIS 站点
在IIS中新建站点(如 www.example.com),注意打开『脚本执行权限』
![](https://i-blog.csdnimg.cn/blog_migrate/5db41d767a9783924dcaf55fcb8bad94.png)
并新建对应的应用程序池(如 example.com)
![](https://i-blog.csdnimg.cn/blog_migrate/c8d4c51a6a211130b02b5227c7f5bb55.png)
将新建站点指定应用程序池为 example.com
![](https://i-blog.csdnimg.cn/blog_migrate/e91bca050590e23727367190af046b76.png)
2.2 全局公共配置方式 - 添加IIS扩展的 isapi_redirector
在IIS的『Web服务扩展』中添加新的服务扩展 - 扩展名可自定义
![](https://i-blog.csdnimg.cn/blog_migrate/fae4d43b02de09eb5ea39bd997c73b18.png)
将isapi_redirect.dll(可以是带有版本号的dll文件)加入,并将其设为『允许』状态
![](https://i-blog.csdnimg.cn/blog_migrate/ed782899395897f3e87e8a3b815cf62e.png)
最终如下图所示
![](https://i-blog.csdnimg.cn/blog_migrate/59642c452392aafe14bf1b116758fb01.png)
2.3 局部站点配置方式 - 在新建站点 example.com 中配置ISAPI筛选器
首先,删除新建 example.com 站点中所有不使用的 ISAPI 扩展
![](https://i-blog.csdnimg.cn/blog_migrate/bb5059263700fe0bad6d2ea5d437ba04.png)
增加『ISAPI筛选器』。
![](https://i-blog.csdnimg.cn/blog_migrate/e15f6f6016cfb54020f2cbd67f40a512.png)
刚建立完备后,kvm筛选器状态和优先级都处于“未知”状态。可参考Microsoft提供的相关帮助说明(
红色线框部分)
![](https://i-blog.csdnimg.cn/blog_migrate/6e659d33f59a28acdf3abb94e0757ec3.png)
新建虚拟目录 - tomcat_srv,
注意建立的虚拟目录名称需与 isapi_redirect.properties 中相对应
![](https://i-blog.csdnimg.cn/blog_migrate/0a058578f23c2d8f8c54fc66fc4b02a1.png)
虚拟目录 tomcat_srv 物理路径需指向 isapi_redirector.dll 所在目录:
![](https://i-blog.csdnimg.cn/blog_migrate/22b00a8ec028b4e41ea1dafaeb43c741.png)
注意打开『可执行』权限
![](https://i-blog.csdnimg.cn/blog_migrate/aba91a79202e7c221bfec772ddab37ff.png)
2.4 修改isapi_redirect.dll对应配置文件
![](https://i-blog.csdnimg.cn/blog_migrate/5c74f8fb1bd6f3bf3615fed5161cdde8.png)
主要修改上图所示部门内容,其中:
- extension_uri - 对应IIS站点虚拟目录(如之前建立的虚拟目录tomcat_srv)下的isapi_redirect.dll;
- log_file - 存储isapi_redirect.dll运行时log的绝对路径;
- work_file、worker_mount_file - 对应相关配置文件的绝对路径;
2.5 workers.properties 和 uriworkermap.properties 配置
uriworkermap.properties的相关配置如下图所示:
![](https://i-blog.csdnimg.cn/blog_migrate/1745b7f2ca516bf1056497ef1e9125a9.png)
主要是为了将所有uri请求进行划分,将不同请求分配给不同的tomcat worker处理(在workers.properties中定义的),
有些则直接交给IIS处理。比如第3行中的
/=pm80
即是将直接域名请求交由 pm80 这个tomcat worker来处理,至于 pm80 是哪个tomcat,
则在下面的
workers.properties 的相关配置中定义:
![](https://i-blog.csdnimg.cn/blog_migrate/4dd793ecc369233a0f9747f259ac6cea.png)
很显然,pm80 这个 tomcat worker 是在本机(localhost)的 9000 端口通过
ajp13 交互协议进行监听的一个tomcat server。其他 worker 也是类似。
另外就是,worker.list 列出了所有 worker 的名字,这些名字对应到每节
worker.<名字>.port=9000worker.<名字>.host=localhostworker.<名字>.type=ajp13worker.<名字>.lbfactor=1
lbfactor用于负载均衡处理,在没搞透 tomcat connector 相关说明前,不建议使用其自带的 load balancer。
2.6 Tomcat 相关配置修改
如下图所示
![](https://i-blog.csdnimg.cn/blog_migrate/11b23f9b53290db4cd6c004343781d84.png)
注意
- 其中各个端口的分配(凡是 port 属性值都要仔细检查) - 是否被占用?
- <Context data-path="/pm81" ... /> 是与前面uriworkermap.properties中相对应的。
存在(遗留)问题
- 没有及时总结,有些内容记不清楚,可以在实际中实验是否正确。
建议
- 还是要及时总结吖,童鞋们!
参考
- 实站iis6.0+tomcat6.0+jk整合(用于初步了解大概怎么回事儿) - http://hi.baidu.com/hfr6666/blog/item/fb76e8386057d82a96ddd8e4.html
- Apache Tomcat - IIS Howto(仅供参考,有些说法估计是为了省事儿 dummies,并不准确) - http://tomcat.apache.org/connectors-doc/webserver_howto/iis.html
- Apache Tomcat Connector Documents(实际还是靠这个) - http://tomcat.apache.org/connectors-doc/index.html
工具
- isapi_redirector - http://archive.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/win32/