如今网上流传的实现iis和tomcat共享80端口的方法是基于isapi_redirect插件实现的, 个人实现方法不一样, 原理类似,具备更好的优势.java
先说下基于isapi_redirect缺点,java 项目做为iis下的一个虚拟目录存在, iis下的项目使用顶级域名, tomcat下的项目只能做为二级目录访问;正则表达式
例如iis下项目 使用www.iisproject.com访问, 则tomcat下的项目只能 www.iisproject.com/tomcatproject 这么访问, 如此变得不友好了.api
个人实现方式, 利用IIS的应用程序请求路由 ARR (application request route) 来实现请求转发.tomcat
"共用80端口"示意服务器
大体步骤( ARR使用请参考上篇文章或自行百度), 在iis上安装ARR, 配置2个server farm (iis应用使用一个iisFarm,tomcat使用一个tomcatFarm), 每一个server farm中只有一台机器即localhost,端口使用本身应用端口(如上图iis 应用使用8080,tomcat应用使用8090) , 每个server farm 都设置url重写routing rules规则, 规则中根据访问url的不一样转发给不一样的serverFarm处理. app
场景一 使用不一样的域名访问url
iis下的某个应用域名为www.iisproject.com, tomcat下的某个应用域名www.tomcatproject.com. spa
iisfarm使用的routing rules.插件
根据上图设置, 只有www.iisproject.com域名下的80端口的http请求 iis 会交给ARR中的iisFarm进行处理, iisFarm中只有localhost:8080的机器,即请求转交给了8080端口的iis应用负责处理. server
tomcatFarm routing rules设置
同理www.tomcatproject.com域名下的80端口的http请求 iis 会交给ARR中的tomcatFarm进行处理, tomcatFarm中只有localhost:8090的服务器, tomcat工做在8090端口, 因此请求是tomcat在处理.
场景二 使用二级目录访问
场景一使用了2个不一样的域名, 若是只有一个域名或没有域名, 咱们也是有办法的, 就是使用 域名/二级目录 或IP/二级目录的方式实现访问, 如 www.project.com/iis,www.project.com/tomcat 或192.168.0.10/iisproject ,192.168.0.10/tomcatproject方式. 实现方式和场景一几乎同样, 只是配置routing rules时, url 为www.project.com/iis开头的交给iisFarm处理, 为www.project.com/tomcat开头的交给tomcatFarm处理, 能够经过正则表达式,通配符搞定的.
以上两个场景, 不管使用域名访问,仍是使用二级目录访问, 在外部客户端看来, iis应用和tomcat应用共用了80端口,目的达到.