利用IIS应用请求转发ARR实现IIS和tomcat整合共用80端口

现在网上流传的实现iis和tomcat共享80端口的方法是基于isapi_redirect插件实现的, 我的实现方法不同, 原理相似,具有更好的优点.

先说下基于isapi_redirect缺点,java 项目作为iis下的一个虚拟目录存在, iis下的项目使用顶级域名, tomcat下的项目只能作为二级目录访问;

例如iis下项目 使用www.iisproject.com访问, 则tomcat下的项目只能 www.iisproject.com/tomcatproject 这么访问, 如此变得不友好了.

我的实现方式, 利用IIS的应用程序请求路由 ARR (application request route) 来实现请求转发.

"共用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处理.

场景一 使用不同的域名访问

iis下的某个应用域名为www.iisproject.com, tomcat下的某个应用域名www.tomcatproject.com.

iisfarm使用的routing rules.

根据上图设置, 只有www.iisproject.com域名下的80端口的http请求 iis 会交给ARR中的iisFarm进行处理, iisFarm中只有localhost:8080的机器,即请求转交给了8080端口的iis应用负责处理.

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端口,目的达到 .

时间: 2024-10-16 21:25:56

利用IIS应用请求转发ARR实现IIS和tomcat整合共用80端口的相关文章

用 IIS 实现请求转发

最近部门要开发一个简单的APP,部分数据是现有项目已经存在的,为了方便维护,希望只提供一个交互的入口,并且协议的规则不变. 基于这个需求,有两套解决方案: 1.用代码将现有的api封装一层,对请求数据和返回数据不做任何改变,只是中转,然后和新的数据接口一起部署在一个项目里: 2.用IIS进行请求转发,调用现有接口回应请求,剩余部分开发新的api,部署在一个项目里,用URL Rewrite进行过滤分发. 第一个方案很传统,没什么好评价的,这里主要讲一下第二种方案的实现,第二个方案的好处是可以节省时

apache与IIS共用80端口冲突解决方法

如果同一台电脑安装了apache和iis,会提示80端口冲突,如何解决apache与iis 80端口冲突的问题呢,并且同时使用apache和iis 将apache设为使用80端口,IIS使用其它端口,比如81,然后将apache作为IIS的代理. 在httpd.conf里面,取消下面四行的注释: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connec

通过Nginx反向代理,IIS和apache 共用80端口

#user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info; #pid logs/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream;

IIS与Apache共用80端口方法[试用成功]

然后假设apache服务器已经安装完成,打开httpd.conf配置文件,找到这些地方去掉#开启代理模块: LoadModule proxy_module modules/mod_proxy.so LoadModule proxy_connect_module modules/mod_proxy_connect.so LoadModule proxy_http_module modules/mod_proxy_http.so LoadModule proxy_ftp_module modules

两个IP实现IIS和Apache公用80端口的设置方法

1. 打开命令提示符并确保您位于 X:\Inetpub\Adminscripts 文件夹(其中 X 是 IIS 安装驱动器)中.为此,请在命令提示符下键入以下命令行: X: CD \Inetpub\Adminscripts 2. 打开 Adminscripts 文件夹后,请在命令提示符下键入以下行: cscript adsutil.vbs set w3svc/disablesocketpooling true 3. 该命令反馈如下: disablesocketpooling :(BOOLEAN)

收藏:解决其它程序与IIS共享80端口的四个方法

今天写的程序也占用80端口,而 IIS也占用 80端口,我在我的一张网卡上分配了两个IP地址,但是测试发现:只要IIS启动后,我写的程序就无法使用80端口,到网上搜索了一下,终于找到了解决办法: 使用:Httpcfg.exe 方法一:IIS5,多IP下共存,IIS为192.168.0.1,apache为192.168.0.2c:\Inetpub\Adminscriptscscript adsutil.vbs set w3svc/disablesocketpooling true该命令反馈如下di

IIS负载均衡ARR路由请求到ARR服务器和处理服务器

.net web 使用IIS ARR(Application Request Route)技术实现web的高性能.高可靠.易扩展及负载均衡.ARR的使用请参考 IIS负载均衡-Application Request Route详解 一般应用场景见下图所示,其中一台服务器只做ARR服务器,接受客户端发来的请求,根据配置的负载均衡算法,把请求转发给真正的请求处理服务器,如下图ServerFarm中的服务器B或C,由服务器B或服务器C来处理请求把处理结果返回给ARR服务器A,ARR服务器再把处理结果返

利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包

原文:利用Advanced Installer将asp.netMVC连同IIS服务和mysql数据库一块打包成exe安装包 因为业务需要,项目中需要把asp.netmvc项目打包成exe安装程序给客户,让客户直接可以点下一步下一步安装部署web程序,并且同时要将IIS服务和mysql一同安装到服务器上,因为客户的电脑可能是64位也可能是32位,所以在打包的时候就需要打包成两份安装包.研究了几天终于有所收获,下边就是打包的步骤. 打包步骤: 一.前期准备 1.将asp.netmvc发布到本地目录中

【IIS】我所理解的IIS处理ASP.NET页面请求过程

众所周知,一个完整的动态网页的从请求到响应无非包括以下3个步骤: 1.浏览器客户端发出http请求. 2.IIS服务端接受请求. 3.处理请求并输出请求结果到浏览器客户端. 首先,简单的说说我所理解的IIS,它依赖于Windows服务World Wide Web Publish Service的,并依赖于进程w3wp.exe的.也就是说IIS的运行离不开工作进程w3wp.exe,同时每个IIS站点下的应用程序都是被用用程序池进行隔离,应用程序池即w3wp.exe的容器,通过池隔离的机制保证当某个