在IIS7中使用ARR(Application Request Routing)反向代理虚拟目录到Nodejs站点

目标:

1.访问www.arrdemo.com/proxy 跳转到 localhost:8898的Nodejs站点

2.Nodejs站点的页面可以返回到浏览器,包括js,css,图片

3.Nodejs站点的 res.redirect(‘ ‘) 重定向要正确,包括站内跳转和站外跳转

步骤:

1. 新建站点绑定域名www.arrdemo.com,配置host文件指向本机,新建虚拟目录proxy。  

注意去掉虚拟目录->压缩->"启用动态内容压缩"和“启用静态内容压缩” 前面的勾选。否则会出现如下错误:

HTTP 错误 500.52 - URL Rewrite Module Error.

HTTP 响应的内容已编码(“gzip”)时,无法应用出站重写规则。

  2.启动Nodejs站点 http://localhost:8898

  这个站点是《nodejs开发指南》上的microblog实例,学习过程中改成了Express4.13.1版本。

  3.安装ARR,启用Proxy

   下载地址(http://www.iis.net/downloads/microsoft/application-request-routing)

  安装完成后,打开IIS->选中服务器名称->双击 右侧功能视图 IIS 节点下的Application Request Routing Cache->点击 右侧操作视图Proxy节点下的Server Proxy Settings->勾选上Enable Proxy前面的复选框

 4.配置虚拟目录的URL重写规则

  在IIS节点,站点节点,虚拟目录节点都可以配置URL重新规则,并且一级级继承。配置完成后信息保存到对应的web.config文件中。所以如果 www.arrdemo.com部署在多个服务器上,每个服务器的proxy虚拟目录都需要重定向时可以采取拷贝proxy下的web.config文件 的方式快速部署。这里只在proxy虚拟目录下部署,排除继承的影响。

首先,配置入站规则。把http://www.arrdemo.com/proxy/reg 这样的url重写成 http://localhost:8898/reg

 

双击"URL重写",从入站规则下选择空白规则模板。剩下的注意细看图片注释:

到这一步正常情况下在浏览器里输入http://www.arrdemo.com/proxy,应该可以看到有内容输出了,但是没有任何样式和js效果。如下图:

这是因为入站规则能把请求转发到nodejs里,nodejs返回的html内容再转发到浏览器。但html里的css和js还有图片的路径一般都是相对站点根路径的,不会加上虚拟目录proxy,所以前端看不到任何样式。

这时候该出站规则上场了。。。。。。。

然后,配置出站规则。把http://localhost:8898/bootstrap/..... 这样的url转换成http://www.arrdemo.com/proxy/bootstrap/.....

我这里就拿已经配置好的规则演示了。规则多了分先后顺序,如果匹配上了是否”停止处理“很重要。比如:匹配上两个重新类型的规则,那么就会在输出里出现proxy/proxy的情形,导致出错。

第一个规则 bbbb,处理输出的js、css、图片等路径不对问题。

做完第一个规则,本应万事大吉,只剩喝酒了。然而。。。。然而。。。。。打开网页登陆后跳转到首页的地址变成了 www.arrdemo.com 没有加上proxy。接着下一规则走起。。。

第二个规则处理res.redirect(‘/‘); 这种站内跳转

站内跳转需要在输出时添加proxy,主要是检查  {RESPONSE_STATUS} 变量为302, 然后在 重写时输出 /proxy{R:1},规则如下(请细看图):

这样处理后站内跳转的就没问题了。

第三个规则处理res.redirect(‘http://www.baidu.com‘); 这种站外跳转

  跟第二个规则的区别就是这种跳转不做任何操作,直接抛出,规则如下:

现在再去浏览器里访问一下试试吧,如果还不行,请重启站点。

总结:

1.完整的配置文件奉上

proxy 下的 web.config

2.查找资料除了百度、必应最应该想到的就是官网帮助文档

每一步操作右侧都有个帮助的链接,点进去是详细的英文文档。

不过也不要完全相信,比如配置重定向跳转时,文档里是这样的:

<outboundRules>
    <!-- This rule changes the domain in the HTTP location header for redirection responses -->
    <rule name="Change Location Header">
        <match serverVariable="RESPONSE_LOCATION" pattern="^http://[^/]+/(.*)" />
        <conditions>
            <add input="{RESPONSE_STATUS}" pattern="^301" />
        </conditions>
        <action type="Rewrite" value="http://{HTTP_HOST}/{R:1}"/>
    </rule>
</outboundRules>

我明明感觉应该是302啊,这里为什么是301;还有Rewrite 里那么写真的对吗?我不确定,不过也得到一个思路使用RESPONSE_STATUS变量。

微服务、nodejs好像很火的样子,我也在尝试。希望这篇文章可以让node+nginx实现域名解析的人们多一种解决思路 node+iis+arr实现域名解析。

时间: 2024-10-05 04:14:34

在IIS7中使用ARR(Application Request Routing)反向代理虚拟目录到Nodejs站点的相关文章

CentOS中实现Nginx负载均衡和反向代理

一.安装必要软件 负载均衡服务器:IP设置为192.168.1.10 Web服务器1:安装Apache或者Nginx,IP设置为192.168.1.11: Web服务器2:安装Apache或者Nginx,IP设置为192.168.1.12. 二.配置负载均衡服务器 1.在Nginx的conf目录下新建extra文件夹,并在其下边编辑生成一个配置文件,比如t_servers.conf upstream test_servers { server 192.168.1.11:80 weight=5;

IIS ARR(Application Request Route)与反向代理(Reverse Proxy)

为何要用反向代理? 这里说说我的场景, 我在服务器上假设了SVN(Visual SVN)用的端口是:8080, 而我想通过输入svn.niusys.com就可以访问我的SVN服务器,也就是要通过80端口访问到内部8080端口的的数据, 那这个时候我们就可以通过反向代理,把所有请求到80端口的数据,发送到8080, 让后再把8080端口返回的数据从80端口返回给原始请求. 反向代理有什么好处呢? 1. 常规应用里面可以解决端口的问题, 像上面举的例子, 我的主要用的地方就是很多组建都是Apache

在centos 7中安装nginx并配置nginx反向代理

Nginx是一款轻量级的Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器,并在一个BSD-like 协议下发行.其特点是占有内存少,并发能力强,事实上nginx的并发能力确实在同类型的网页服务器中表现较好,中国大陆使用nginx网站用户有:百度.京东.新浪.网易.腾讯.淘宝等. 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,

NLB+Application Request Route 网路负载均衡

NLB网路负载均衡管理器详解 序言 在上一篇配置iis负载均衡中我们使用啦微软的ARR,我在那篇文章也中提到了网站的高可用性,但是ARR只能做请求入口的消息分发服务,这样如果我们的消息分发服务器给down掉啦,那么做再多的应用服务集群也都枉然. 这篇文章我主要针对解决这一问题来做分析,引入NLB,相对于ARR来说,ARR算是应用级别的负载均衡方案,而NLB则是服务器级别的负载均衡方案. 如果微软的这两款方案我们结合起来使用,那便是微软高可用网站方案的天作之合啦. Application Requ

IIS7中的站点、应用程序和虚拟目录详细介绍 (转)

这里说的不是如何解决路径重写或者如何配置的问题,而是阐述一下站点(site),应用程序(application)和虚拟目录 (virtual directory)概念与作用,已及这三个东西在IIS6与IIS7中的异同.因为站点,应用程序和虚拟目录是我们在IIS上架设网站时肯定会遇到的, 但它们的概念又是那么的含糊(至少对我来说).我在网上找了一些资料来学习,其中一个写的比较详细的是:Understanding Sites, Applications, and Virtual Directorie

iis7.5做反向代理配置方法实例图文教程

网络上好多开场的文章就说了好多的原理之类的这里我们直接开始配置.不过也要简单说下win下配置反向代理只有IIS7以上的版本才可以实现这个功能,在这里我们使用WINDOWS2008 R2来做为测试 2008R2上安装的是IIS 7.5 ,我们需要通过Application Request Routing模块来实现反向代理.接下来我们来说下Application Request Routing模块的安装方法首先前往http://www.iis.net/extensions/ApplicationRe

Windows Server 2008 中iis反向代理设置

1.安装 IIS(Windows专业版自带,如果是server版系统,需要通过功能管理器安装(无需下载)) urlrewrite插件,https://www.iis.net/downloads/microsoft/url-rewrite ARR插件(Application Request Routing)https://www.iis.net/downloads/microsoft/application-request-routing.如果只转发到IIS内网站,则不需要ARR 上面两个插件均可

iis7+的虚拟目录:未能加载程序集“**”。请确保在访问该页之前已经编译了此程序集

在使用win8系统后,突然想运行iis,于是在windows组件中启用iis,并aspnet_regiis.exe -i注册iis后,于是开始发布了一个站点,一切正常 继而,在该站点下添加虚拟目录,然后预览虚拟目录的网页,就会立刻报类似“未能加载程序集“App_Web_utohcdb4”.请确保在访问该页之前已经编译了此程序集.”的错误 我纳闷了,我记得在以前版本的iis上建立一个虚拟目录是何其的简单并且不会出错,搜索后发现,原来右击网站,有了两个选下个“添加应用程序”和“添加虚拟目录” 继续搜

生产环境中nginx既做web服务又做反向代理

一.写对于初入博客园的感想 众所周知,nginx是一个高性能的HTTP和反向代理服务器,在以前工作中要么实现http要么做反向代理或者负载均衡.尚未在同一台nginx或者集群上同时既实现HTTP又实现反向代理. 那么到底nginx能否既实现HTTP又实现反向代理呢? 答案是肯定的 刚好前段时间在实际项目中有一个类似的情况出现,由此与大伙分享,由于以前没有写博文的习惯,只习惯于自己记录操作实现步骤及稳定,在以前常遇见问题都是百度.谷歌,众位网友的博文帮助自己见解决了很多问题. 由此可见技术分享的重