IIS 反向代理 Tomcat中的网站

前言

之前说过用ApacheNginx做代理来访问Tomcat中的项目.
现在因工作需要 只能用IIS作为Web服务器来把请求转发到Tomcat

我现在知道的共有四种实现方式

  • 使用isapi_redirect.dll实现
  • Weblogic的插件包中的iisforward.dlliisproxy.dll来实现
  • ARR(Application Request Routing)
  • HttpPlatformHandler

我最终使用的是第三种方式 下面说一下各个方式的优缺点

  • 第一种方式需要修改注册表(网上说的也可以不用添加注册表 我通过这种方式没有成功)
  • 第二种方式 新版本的Weblogic的插件包中不包含iisforward.dll
  • 第三种只支持IIS7以上
  • 第四种 相当于 Tomcat由IIS托管 不但要配置IIS 还有修改Tomcat的默认配置 所以不建议

安装软件

在Win10以下的系统中直接在官网下载ARRMicrosoft URL 重写模块 2.0 安装就可以了

但是 他要求的IIS7以上 却不能识别Win10上的IIS10 但其实是能用的
这里放出我修改过的安装包ARRMicrosoft URL 重写模块 2.0

安装之后重启iis

1
iisreset

配置

安装完成后 在服务器级别的功能试图中 会多出两项

  • Application Request Routing
  • URL重写

网站级别的功能试图中 会多一项

  • URL重写

点击 Application Request Routing
点击右边的Server Proxy Settings
勾选Enable proxy后 点击右侧的应用

点击项目级别的功能试图中的URL重写

首先需要知道的是
IIS不能配置如Apache中的ProxyPassReverseCookiePath /yxemail /来矫正Cookie的路径
所以IIS配置反向代理的时候就不能带项目名 带项目名就会导致Session失效
也就是说IIS做反向代理 又要考虑Session 就必须去掉Tomcat中项目访问链接中的项目名
Tomcat中要配置一个HOST
IIS中要配置URL地址的入站规则HTTP响应头或内容的出站规则

配置Tomcat

1
2
3
<Host name="www.aaa.com"  appBase="C:/Program Files/Tomcat 7.0/webapps_me" unpackWARs="true" autoDeploy="true">  
<Context path="" docBase="yxemail" debug="0"/>
</Host>

需要注意的是 appBase一定要换一个路径 因为每个HostappBase中的项目 在Tomcat启动时会重新加载
所以多个Host中的appBase一样的话 就会导致一个项目被加载多遍

这样 网站目前可以用www.aaa.com:8080访问

配置IIS

添加一个网站 主机名设置为www.aaa.com 端口80

点击 URL重写

入站规则

添加规则 选择入站规则中的空白规则

设置项名称 设置项内容
名称 随便写
模式 (.*)
条件 {SERVER_PORT}设置为80
{HTTP_HOST}设置为www.aaa.com
重写URL http://www.aaa.com:8080/{R:0}

出站规则

所谓的出站规则就是返回的html内容根据规则替换里面的url

添加规则 选择出站规则中的空白规则

设置项名称 设置项内容
名称 随便写
匹配范围 响应
匹配一下范围中的内容 除自定义外全选
模式 (.):8080/(.)
操作类型 重写
操作属性 http://www.aaa.com/{R:2}

这样的话就能用www.aaa.com来访问www.aaa.com:8080的网站了