IIS和tomcat共用80端口( isapi_redirect.dll方法)同一个服务器建立多个80端口网站的方法 —— tomcat-connector的isapi_redirct.dll插件

 

 IIS和tomcat共用80端口(isapi_redirect.dll)
(同一个服务器建立多个80端口网站的方法)

 

背景:

很多时候,我们需要在一台服务器上部署多个网站并解析域名,但是域名访问默认是80端口,所以就需要解决一台服务器公用80端口的问题,下面我就向大家介绍一下配置过程。

 很多机器都需要同时使用tomcat和iis两个服务器以部署不同的网站,而解决共用80端口的问题也经常遇到,今天实际操作了一回,以下是具体步骤

 

实现思路
实现tomcat和iis共用80端口的思路其实就是利用iis可以建立多个网站的功能,将tomcat下的项目添加为iis的一个站点,再使用一个可以redirect的插件,将iis中指向此站点的请求交给tomcat来处理。

 

原理: 

在IIS中使用isapi_redirct.dll转发给tomcat处理

  转发过程:Tomcat非80端口正常运行时;IIS任意一个80端口的网站新增一个虚拟目录(绑定Tomcat的域名),通过isapi_redirct.dll的配置文件指向Tomcat。

 

环境

  Windows 2008R2, iis7,  Apache-Tomcat-8.5.27

  前提条件:已经正确安装了IIS和Tomcat,且两者独立使用时,网站都可以正常运行。
                即:http://127.0.0.1/能够访问IIS下部署的80站点,http://127.0.0.1:8080/能够正常访问Tomcat下部署的8080站点。
              (没有的话,请先将网站调通再进行下一步)

  注意:tomcat是用8083(非80端口),而IIS中的用80端口。   

<Connector port="8083" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />

  

  

配置计划

首先列出我们需要做的事项:

  一、下载tomcat-connector的dll

  二、创建两个目录​,一个用于iis建立网站,一个用于创建jakarta虚拟目录

  三、创建3个properties文件

  四、iis设置映射关系配置
         4.1 IIS根目录:【ISAPI和CGI限制】添加dll路径 和 勾选处理程序映射的全部权限
         4.2 IISConn网站:创建网站并添加jakarta虚拟目录
         4.3 IISConn网站: 【ISAPI筛选器】添加dll路径 和 添加JSP支持(处理程序映射) 

 

 

一、下载tomcat-connector的dll文件

 下载isapi_redirct.dll文件

 在tomcat​官方完全可以下载,会得到isapi_redirect.dll
   下载地址: https://tomcat.apache.org/download-connectors.cgi​
   下载地址2(直达):http://www.apache.org/dist/tomcat/tomcat-connectors/jk/binaries/windows/

特别注意,32位及64位系统使用对应的dll,否则会出现类似 调用GetFilterVersion失败 这样的异常
    x86&64位使用(32&64位推荐):tomcat-connectors-1.2.49-windows-x86_64-iis.zip
    32位i386(Intel_80386的1985年旧架构):tomcat-connectors-1.2.49-windows-i386-iis.zip
    {版本号可能会有略微变化,因为一直在更新中}
解压得到我们的最关键文件:isapi_redirect.dll:

 

二、创建目录

  创建如下目录结构:

最好在Tomcat安装目录的路径(下面统一称为【tomcat_home】) 下创建目录  {bin、conf、WebApps文件夹的上级目录}。

目录1:IISConn 目录,用于存放workers.properties和uriworkermap.properties,最后将用于IIS建立网站;
目录2:IISConn\jakarta\​目录,用于放置isapi_redirect.properties和isapi_redirect.dll,最后将用于创建jakarta虚拟目录。

 

Tomcat目录假设为:D:\ApacheTomcat\Tomcat8.5\

文件

     IISConn的目录则应该是:D:\ApacheTomcat\Tomcat8.5\IISConn\

workers.properties
uriworkermap.properties

                   jakarta的目录:D:\ApacheTomcat\Tomcat8.5\IISConn\jakarta\

isapi_redirect.dll
isapi_redirect.properties

 

目录结构很重要,如果isapi_redirect.properties没有存放到jakarta目录,会出现GetFilterVersion失败的500错误!
下图的例子是直接在Tomcat安装目录下创建一个IISConn文件夹,打开IISConn文件夹后再创建一个jakarta文件夹

 

  假设我们已经创建好了这两个文件夹,进入下一步。

 

 

三、创建并配置3个.properties配置文件

  文件:1:uriworkermap.properties 

 文件内容如下

1
2
/testiisconn/*=testiisconn  
/examples/*=examples

         examples 是Tomcat默认的一个项目名称; testiisconn 可以看作是一个变量,用于

 

     问题处理:如果这样配置在最后输入域名访问到的是IIS页面(或IIS的错误提示)的话,就重新配置成如下:              

1
2
3
4
/*=testiisconn  #必须要  
/system/=testiistom #访问system目录时转到Tomcat服务器处理(可有可无)
/system/*.jsp=testiistom #system下.jsp文件转到Tomcat服务器处理(可有可无)
/system/*=testiistom  #system下所有文件转到Tomcat服务器处理(可有可无)

                  文件uriworkermap.properties简化为:

/*=testiisconn

##说明:uriworkermap.properties的最简化配置
#这个地方,=前面为tomcat的项目名称,后面为worker.list的名称,如下面就是映射 http://localhost:8080/tomcatprojectname/这个tomcat网站的
#如果不加项目名:/*=testiisconn 会映射tomcat的所有项目

                  意思是去这个域名下面的所有文件转发给tomcat处理,tomcat的所有项目

说明:等号左边是路径规则,符合此规则的就通过Connector转发给tomcat。比如说在浏览器上访问 http://localhost/examples/,符合 /example/*的规则,那么它就会转发给Tomcat对应的worker,转发目标worker名称为examples
等号右边即是workers.properties文件定义的worker

 

  文件:2:workers.properties 

   文件内容如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
workers.tomcat_home=E:/Apache-Tomcat/Tomcat8           //自己tomcat的路径(可以看到bin文件夹)
workers.java_home=C:/Program Files/java/jdk.1.8.0_131 //你的jdk的路径(bin同一目录)
## 注意:这里的斜杆与Windows目录相反 ps=/

#testiisconn、examples为访问Tomcat服务器的一个标签,
#对应【tomcat_home】/webapps/文件夹下面的testiisconn和examples文件夹,可以设置多个,用逗号隔开
worker.list=testiisconn,examples

worker.testiistom.type=ajp13
worker.testiistom.host=localhost
worker.testiistom.port=8009
worker.testiistom.lbfactor=1

worker.examples.type=ajp13
worker.examples.host=localhost
worker.examples.port=8009
worker.examples.lbfactor=1

     文件workers.properties 可以简化为:    

workers.tomcat_home=E:/Apache-Tomcat/Tomcat8       //自己tomcat的路径
workers.java_home=C:/Program Files/java/jdk.1.8.0_131   //你的jdk的路径
## 注意:这里的斜杆与Windows目录的\相反,复制过来要修改!  
  
#testiisconn 可以看作是一个局部变量的标志符号
worker.list=testiisconn 

#下方的ajp13、localhost、8009等都是默认的,可以去除掉

  

 

  文件:3:isapi_redirect.properties  

 (与dll文件同名,仅扩展名不同)

   文件内容如下

1
2
3
4
5
extension_uri=/jakarta/isapi_redirect.dll  
log_file=E:/Apache-Tomcat/Tomcat8/logs/isapi_redirect.log //建议用tomcat的logs路径,也可以自定义
log_level=debug
worker_file=E:/Apache-Tomcat/Tomcat8/conf/workers.properties //重新修改成你自己的路径
worker_mount_file=E:/Apache-Tomcat/Tomcat8/conf/uriworkermap.properties //重新修改成你自己的路径

 在【tomcat_home】/conf/ 文件夹下面(isapi_redirect.dll文件在里面), 新建立一个与dll文件名相同,扩展名为properties的配置文件,即:isapi_redirect.properties,isapi_redirector.dll初始化时,默认会在自己所在的目录寻找同名的配置文件,如果没有再到注册表中读取配置信息.
isapi_redirect.properties的内容。

 

        特别特别特别注意

isapi_redirect.properites的文件需要注意编码问题,在本次测试中我使用ansi编码才行,之前使用utf-8编码存储的时候,发生调用 GetFilterVersion 失败

 

      

 

四、配置IIS(配置ISAPI筛选器 和 配置处理程序映射JSP)

因为公用80端口的这个方法是通过iis来转发给tomcat的,所以需要配置IIS

主要工作:对IISConn目录创建一个网站,然后对jakarta目录创建一个虚拟目录。

4.1、对IIS的根节点(服务器)进行配置(localhost)

    IIS根目录:【ISAPI和CGI限制】添加dll路径 和 勾选处理程序映射的全部权限

 

1.打开IIS,点击计算机名这个节点,即最顶端那个节点(“起始页”下面的第一个——根节点) :

    

2.在中间区域框中找到【ISAPI和CGI限制】,双击它打开功能  

3.双击【ISAPI和CGI限制】后,在右边框点击【添加】

     

    信息如下:

         ISAPI或CGI路径(I): 在右边...按钮选择,是【tomcat_home】\IISConn\jakarta\isapi_redirect.dll
         描述:  jakarta             //也可以是其他,如TomcatISAPI
        允许执行扩展路径(A):要勾选  

 

 4.  另外,再次点击IIS的根节点,添加【处理程序映射】权限
       在中间区域框找到【处理程序映射】,双击打开它; 然后在右边操作框找到【编辑功能权限】,将所有的权限都勾选上。

  

 

 

4.2、 创建跳转网站并建立虚拟目录

  A, 为Tomcat创建一个IIS网站,命名为IISConn

        网站名称建议设置为 IISConn  (可以修改,建议就用这个)

1. 在IIS的界面上,展开到网站层, 在【网站】上点右键,【添加网站】,如下图:

 

 

2.配置网站

     网站名称: IISConn  
     物理路径: 【tomcat_home】\IISConn          \\IISConn文件夹的路径  
     绑定    ip地址:全部未分配   ;      主机名:Tomcat的域名

        

 

 

  B, 为网站创建jakarta虚拟目录

       创建虚拟目录

     在这个网站下,对jakarta目录创建一个虚拟目录。 

    

  

      “添加虚拟目录”的配置: 【虚拟目录的别名必须用这个jakarta】

       别名:      jakarta
       物理路径:【tomcat_home】\IISConn\jakarta          \\jakarta文件夹的路径

                         

 

 

 

 

 4.3、 对新建的跳转网站做配置

A. 为IISConn网站配置ISAPI筛选器

  1. 在IIS的界面上,展开到网站层级,找到我们刚刚创建的网站【IISConn】节点

       

 

 

 2. 在中间区域框找到【ISAPI筛选器】,双击打开它

 3. 双击【ISAPI筛选器】后,在右边框点击【添加】

      配置如下: 名称与上面的虚拟目录名称一致,都是jakarta

           筛选器命名(F):jakarta            //也可以是其他,如TomcatISAPI
           可执行文件(E):选择【tomcat_home】\IISConn\jakarta\isapi_redirect.dll

 

 

 

B. 为IISConn网站添加 JSP 支持 

   再次进入【IISConn】网站,为jsp格式添加【处理程序映射】权限
           a, 在中间区域框找到【处理程序映射】,双击打开它;

           

           b,点击最右侧操作栏的“添加模块映射”

                因为我们在中间区域的清单里,我们没有发现*.jsp,所以需要为jsp添加管理处理程序。 

                     

 

            c,可以参考下方截图,填写相关信息

                 

            添加模块映射:

             请求路径: *.jsp           //必须保持一致
             模块: IsapiModule     //可以输入一半下拉选择
             可执行文件: 【tomcat_home】\IISConn\jakarta\isapi_redirect.dll        (同上面的dll路径)
             名称:jsp          //名称也可以根据自己的喜好设置

 

            

            d,(可选)最后检查一下最右边操作框找到【编辑功能权限】,是否已经勾选了所有的权限

               正常情况下,应该都是已经勾选上的(因为在服务器的根节点已经做了类似的操作)。

                    

 完成。

 

 

 

测试

1.重新启动IIS和tomcat
2.访问你的域名,正常的话是可以访问,那就成功了,如果显示的页面是IIS页面,那就按我上面的那一个【配置uriworkermap.properties文件,重新配置一下】重新配置
3.如果还是访问不到,那就域名+你的项目名,访问正常的话就OK了,那就去tomcat配置一下你的context内容

 

 

总结 & 常见问题

整个过程有很多误区:​

误区包括:

1、是否需要修改注册表​:

答,不需要,tomcat docs里面已经明确说明, The redirector will check for the isapi_redirect.properties file during initialisation, and use it in preference to the registry if present,所以isapi_redirect.properties最优先,其次才是注册表,而写注册表非常容易搞错。

需要注意的的是,这个properties文件一定要放在共同目录,否则无效。​

2、是否需要​设置端口:

答,只有非默认才需要设置,否则不需要设置

默认就是ajp13,localhost,8009,如果有变化你才需要设置,否则work.list后面的的行,全部可以删除。

3、是否需要在tomcat/conf目录​放置那些文件:

答:不需要,任意磁盘位置均可​

4、出现GetFilterVersion 是由于没有写或修改注册表

答​:注册表配置,基本不会成功,请用isapi_redirect.properties文件,更为方便

HTTP 错误 500.0 - Internal Server Error》调用 GetFilterVersion 失败,在 ISAPI 筛选器 "D:\tomcat9\iistomcatconnector\jakarta\isapi_redirect.dll" 上

5、是否需要配置tomcat的server.xml

答:根本不需要​

6、是否需要配置iis的jsp映射

答:不需要​,dll只按照uriworkermap.properties所配置的规则进行目录映射,比如springboot开发的程序,根本没有扩展名,更无从配置

7、 .properties配置文件中的路径

答:   isapi_redirect.properties 与workers.properties和uriworkermap.properties 三个配置文件,中的文件路径都是跟Windows不同的正斜杠/ (而不是反斜杠)。

8、 联系Tomcat网址时出现“服务器错误  403 - 禁止访问: 访问被拒绝。您无权使用所提供的凭据查看此目录或页面。 ”如何解决?

        

       答: 这个错误明显是IIS的报错,可以参考这里的 -->问题解决 。 
               也可能是没有在IIS里做 “ISAPI和CGI限制” 和 “ISAPI筛选器”,或没有做“处理程序映射”等操作导致的。

        

       

 

 

 

  参考文章1  | 参考文章2  |   参考文章3

 

·

 

·

 

posted @ 2020-02-15 01:58  亟待!  阅读(1374)  评论(0)    收藏  举报
……