——独立观察员 2014.11.29
前言
最近头儿让我搜寻并搭建一些CMS网站来作为参考,在部署了一些ASP.NET和PHP的CMS之后,我将目光转向了Java类的CMS。由于服务器上安了IIS,而JSP一般是用Tomcat来解析的,所以考虑使用IIS与Tomcat整合的方法。看过几篇让人头大的教程,自己跌跌撞撞部署过之后,我决定自己也写一篇让人头大的记录。
准备文件
前期准备工作就是——安装Java,下载安装Tomcat,下载isapi_redirect.dll文件。然后,在Tomcat目录下需要添加和修改以下文件:
我这里打包了这些文件以供参考:
http://dlgcy.qiniudn.com/【文件】Tomcat和IIS整合时conf文件夹中需要新增和修改的文件参考.7z
文件内容图示
(文件内容中的一些路径按照自己的实际情况修改)
添加的workers.properties文件,应该是用于配置工作者信息的:
添加的uriworkermap.properties文件,应该是用于设置某个工作者可接收的路径:
添加的isapi_redirect.properties文件,用于指定一些文件的路径:
创建(随便放哪里,使用完删除也可以,命名也随意)的注册表文件:
注意红框标出的命名,之后这类的网站(需要启用本文讨论的转发jsp、jspx等到Tomcat的情况的)在IIS中设置的虚拟目录的名字就要是这个了。
这个注册表文件的内容在网上还有一种版本,应该是适用于32位系统的吧:
我两种都导入(.reg文件双击导入)过,所以最后不知道是哪一个起作用了,大家注意一下。
还有就是系统的hosts文件中可以添加一个虚假的域名(只在本地起作用)来使用:
以上文件一般写好放好后就没什么事了,之后经常要修改的是Tomcat的conf文件夹下的server.xml文件:
Host是虚拟主机,Context可看作是各个网站的设置。
IIS设置
1、”ISAPI和CGI限制“设置(全局)
添加指向isapi_redirect.dll文件的项,名称任意:
2、”处理程序映射“设置(全局)
通过”添加脚本映射”来添加指向isapi_redirect.dll的”*.jsp“项:
依葫芦画瓢地添加”*.jspx“的项:
然后分别点击”编辑功能权限”,赋予他们”执行”权限:
3、”ISAPI筛选器“设置(单独)
对单个网站进行 ISAPI筛选器的配置,也是添加指向isapi_redirect.dll的项,名称任意:
ISAPI处也可进行全局配置,不过为了不影响 IIS 下其它网站的运行,不推荐这样:
4、相关网站的虚拟目录设置
虚拟目录名需与之前提到的注册表中的一样(网上的教程都是写这个jakarta):
网站配置
Tomcat默认是监听8080端口,在浏览器中访问localhost:8080,出现Tomcat默认页面则表示安装成功:
新增网站后可在Tomcat的server.xml文件中设置以便访问:
Context节点下的path属性是设置供Tomcat识别的虚拟路径,docBase的值指定了网站的实际位置,workDir设置的路径用于放置编译出的class文件,一个虚拟主机(Host节点)下可通过设置不同的path值放置多个Context节点来代表不同的网站。
通过虚拟路径访问页面:
需要与IIS共用80端口,就需要在IIS相关网站处设置主机名,端口就可以为80了。
如果不设置主机名,而80端口已被占用,则需给新网站设置其他端口:
此时虽然在IIS中没有设置主机名了,但是还是不能通过IP访问:
因为Tomcat的server.xml中并没有设置名字为对应IP的虚拟主机,我们自己添加上去:
然后就可以通过IP访问了:
注意,每次修改server.xml后需要重启Tomcat才能生效(文末有重启方法),如果有错误,则启动不了了,比如,我们将虚拟主机名修改为如下则不能启动了:
可见,Tomcat的虚拟主机名支持IP形式,但不支持带端口号的IP形式。
不过可通过设置虚拟路径来解决多网站的问题(这是针对IP访问来说的,如果有域名,直接设置多个虚拟主机即可):
加上虚拟路径来访问:
使用 Tomcat 虚拟路径(path)功能的,需要将转发设置为所有文件都转发到 Tomcat:
否则访问普通(未设置为转发的)页面或文件时,IIS 会将为 Tomcat 设置的虚拟路径加上,导致找不到资源:
正因为这样,之前说过”ISAPI筛选器”要每个需要的网站单独设置,而不是全局设置,否则这里设了全部转发,那么其它网站也都转发到Tomcat来了。
关于IIS和Tomcat这样整合后访问方式的总结
1、以 “IP + 端口号 + Tomcat虚拟路径” 访问(用于测试)
-
将 IP 设为 Tomcat 的一个”虚拟主机”;
-
IIS监听端口号,按照 Tomcat 配置的转发规则决定是否转发到 Tomcat ;
-
如果不转发,则 IIS 自己解析并显示;
-
如果转发到 Tomcat ,则 Tomcat 忽略端口(应该也能设置为不忽略吧),然后匹配”虚拟主机”,再匹配”虚拟路径”,获得物理路径,解析文件后回应给 IIS 以供显示;
-
如果”虚拟路径”为””或”/”,即相当于未设置虚拟路径,则在 IIS 和 Tomcat 中认为的物理路径是一样的;
-
如果设置了”虚拟路径”,则 Tomcat 得到的地址就是 “虚拟路径” 设置的地址,而 IIS 并不知道 Tomcat 处设置的 “虚拟路径”,就会在地址中再加上这个路径字符串,导致找不到文件;突然想到在 IIS 中再设置同名的 “虚拟目录” 能不能解决,大家可以试一试,如果不行,那么解决方法就是将所有文件转发到 Tomcat 去解析。
2、以 “域名 [+ Tomcat虚拟路径]” 访问(实际使用)
-
这样一般就是想与 IIS 共用 80 端口,也就是实际的使用情况;
-
IIS 中如果已有网站使用了 80 端口,则新网站要设置”主机名”(填写域名)才可使用80端口,且不再支持 IP 访问;
-
至于 Tomcat 方面,需要设置与域名同名的”虚拟主机”;
-
本地测试时,没有域名,可在系统的 Hosts 文件中设个指向”127.0.0.1″ 的 “本地域名”来使用。
附-重启Tomcat和IIS的方法
重启TomCat的方法
1、使用/bin下的 startup.bat 和 shutdown.bat ;
2、使用 tomcat8w.exe :
3、其它。
Windows Server 2008 R2 中 IIS 7.5 的重启方法
点击”应用程序池”上面的计算机名,在最右边的侧边栏有”重新启动”。
原创文章,转载请注明: 转载自 独立观察员(dlgcy.com)
本文链接地址: [IIS与Tomcat整合二三事](https://dlgcy.com/iis-tomcat/)
关注微信公众号 独立观察员博客(DLGCY_BLOG) 第一时间获取最新文章
发表评论