IIS与Tomcat整合二三事

IISTomcat整合二三事

——独立观察员 2014.11.29

前言

最近头儿让我搜寻并搭建一些CMS网站来作为参考,在部署了一些ASP.NET和PHP的CMS之后,我将目光转向了Java类的CMS。由于服务器上安了IIS,而JSP一般是用Tomcat来解析的,所以考虑使用IIS与Tomcat整合的方法。看过几篇让人头大的教程,自己跌跌撞撞部署过之后,我决定自己也写一篇让人头大的记录。

 

准备文件

前期准备工作就是——安装Java,下载安装Tomcat,下载isapi_redirect.dll文件。然后,在Tomcat目录下需要添加和修改以下文件:

20141129 (1)

我这里打包了这些文件以供参考:

http://dlgcy.qiniudn.com/【文件】Tomcat和IIS整合时conf文件夹中需要新增和修改的文件参考.7z 

 

文件内容图示

(文件内容中的一些路径按照自己的实际情况修改)

 

添加的workers.properties文件,应该是用于配置工作者信息的:

20141129 (2)

 

添加的uriworkermap.properties文件,应该是用于设置某个工作者可接收的路径:

20141129 (3)

 

添加的isapi_redirect.properties文件,用于指定一些文件的路径:

20141129 (4)

 

创建(随便放哪里,使用完删除也可以,命名也随意)的注册表文件:

20141129 (5)

注意红框标出的命名,之后这类的网站(需要启用本文讨论的转发jsp、jspx等到Tomcat的情况的)在IIS中设置的虚拟目录的名字就要是这个了。

 

这个注册表文件的内容在网上还有一种版本,应该是适用于32位系统的吧:

20141129 (6)

我两种都导入(.reg文件双击导入)过,所以最后不知道是哪一个起作用了,大家注意一下。

 

还有就是系统的hosts文件中可以添加一个虚假的域名(只在本地起作用)来使用:

20141129 (7)

 

以上文件一般写好放好后就没什么事了,之后经常要修改的是Tomcat的conf文件夹下的server.xml文件:

20141129 (8)

Host是虚拟主机,Context可看作是各个网站的设置。

 

IIS设置

1、”ISAPI和CGI限制“设置(全局)

20141129 (9)

 

添加指向isapi_redirect.dll文件的项,名称任意:

20141129 (10)

 

2、”处理程序映射“设置(全局)

 

通过”添加脚本映射”来添加指向isapi_redirect.dll的”*.jsp“项:

20141129 (11)

 

依葫芦画瓢地添加”*.jspx“的项:

20141129 (12)

 

然后分别点击”编辑功能权限”,赋予他们”执行”权限:

20141129 (13)

 

3、”ISAPI筛选器“设置(单独)

对单个网站进行 ISAPI筛选器的配置,也是添加指向isapi_redirect.dll的项,名称任意:

20141129 (14)

 

ISAPI处也可进行全局配置,不过为了不影响 IIS 下其它网站的运行,不推荐这样:

20141129 (15)

 

4、相关网站的虚拟目录设置

虚拟目录名需与之前提到的注册表中的一样(网上的教程都是写这个jakarta):

20141129 (16)

 

20141129 (17)

 

网站配置

Tomcat默认是监听8080端口,在浏览器中访问localhost:8080,出现Tomcat默认页面则表示安装成功:

20141129 (18)

 

新增网站后可在Tomcat的server.xml文件中设置以便访问:

20141129 (19)

Context节点下的path属性是设置供Tomcat识别的虚拟路径,docBase的值指定了网站的实际位置,workDir设置的路径用于放置编译出的class文件,一个虚拟主机(Host节点)下可通过设置不同的path值放置多个Context节点来代表不同的网站。

 

通过虚拟路径访问页面:

20141129 (20)

 

需要与IIS共用80端口,就需要在IIS相关网站处设置主机名,端口就可以为80了。

 

如果不设置主机名,而80端口已被占用,则需给新网站设置其他端口:

20141129 (21)

 

此时虽然在IIS中没有设置主机名了,但是还是不能通过IP访问:

20141129 (22)

 

因为Tomcat的server.xml中并没有设置名字为对应IP的虚拟主机,我们自己添加上去:

20141129 (23)

 

然后就可以通过IP访问了:

20141129 (24)

 

注意,每次修改server.xml后需要重启Tomcat才能生效(文末有重启方法),如果有错误,则启动不了了,比如,我们将虚拟主机名修改为如下则不能启动了:

20141129 (25)

可见,Tomcat的虚拟主机名支持IP形式,但不支持带端口号的IP形式

 

不过可通过设置虚拟路径来解决多网站的问题(这是针对IP访问来说的,如果有域名,直接设置多个虚拟主机即可):

20141129 (26)

加上虚拟路径来访问:

20141129 (27)

 

使用 Tomcat 虚拟路径(path)功能的,需要将转发设置为所有文件都转发到 Tomcat:

20141129 (28)

 

20141129 (29)

 

否则访问普通(未设置为转发的)页面或文件时,IIS 会将为 Tomcat 设置的虚拟路径加上,导致找不到资源: 

20141129 (30)

 

正因为这样,之前说过”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 :

20141129 (31)

3、其它。

 

Windows Server 2008 R2 中 IIS 7.5 的重启方法

点击”应用程序池”上面的计算机名,在最右边的侧边栏有”重新启动”。

打印本文

回复