在IIS7中应用Application Request Routing配置反向代理的图文教程_win服务器

在配置web服务器的时候,我们经常遇到这样的问题,由于某些原因,该服务器只能拥有一个公网IP,但是可能需要提供其他机器或者本机上其他webserver的服务器给访问者,同时又不希望使用其他端口,如果在linux下,常见的解决方案是使用nginx作为前端server,通过反向代理间接访问其他webserver.在IIS7之前,在windows上要实现该功能却不是一件容易的事情,但是在IIS7上,通过Application Request Routing模块,我们可以轻松实现反向代理.

  本次测试配置的情况,简单起见,只在iis中测试,配置3个网站,第一个”LevenWeb”,使用80端口提供服务,第二个”levenblog”,下面运行着levenblog2.0.9,使用8080端口,第三个”phpweb”,下面有一个”test.php”的phpinfo页面(iis7 php配置本文不再详述),本机ip:192.168.1.8,为了测试,我们先进行域名绑定,也就是在leven.com.cn下新增3个子域名,域名绑定如下图所示:

我们的目标如下:

  http://phpweb.leven.com.cn/ 访问phpweb站点,也就是http://localhost:8081/

  http://levenblog.leven.com.cn/ 访问levenblog站点,也就是http://localhost:8080/

  http://realblog.leven.com.cn/ 访问公网上的levenblog站点,也就是http://leven.com.cn/

  http://localhost/leven 访问levenblog站点,也就是http://leven.com.cn/

  首先前往http://www.iis.net/extensions/ApplicationRequestRouting下载Application Request Routing,然后安装,本次实践使用的是V2版.

  安装完毕之后,新建3个站点:

  然后找到ARR配置菜单:

  开启Proxy项:

  然后在levenweb站点下配置反向代理路由,配置可以使用UI界面或者直接修改web.config的模式,本次配置给出ui和config文件两种方式,个人更喜欢config配置文件模式.

  进入该项,先配置第一项, http://phpweb.leven.com.cn/ 访问phpweb站点,也就是http://localhost:8081/,选择”Add Rules...”:

  然后选择”Blank Rule”

  然后填写如下:

  图片看不清楚?请点击这里查看原图(大图)。

  该参数设置表面ARR将拦截所有请求

  继续在”Conditions”中选择”Add”:

  该设置表面只有HTTP_HOST为phpweb.leven.com.cn的URL才能通过该规则,如果您绑定了多个域名,可以根据多次增加或者通过正则表达式的|来间隔

  最后在下面的Action中配置代理路径:

  图片看不清楚?请点击这里查看原图(大图)。

  在这儿,{R:1}代表了MatchUrl中的第一个匹配括号

  同样配置的web.config文件如下:

复制代码 代码如下:

<rewrite>
  <rules>
    <rule name="phpweb">
      <match url="^(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^phpweb.leven.com.cn$" />
      </conditions>
      <action type="Rewrite" url="http://localhost:8081/{R:1}" />
    </rule>
  </rules>
</rewrite>

测试访问http://phpweb.leven.com.cn/test.php,结果如下:

  下面同样可以配置levenblog.leven.com.cn和realblog.leven.com.cn

  Ui界面配置不再说明,配置完成的web.config如下:

复制代码 代码如下:

<rewrite>
  <rules>
    <rule name="levenblog">
      <match url="^(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^levenblog.leven.com.cn$" />
      </conditions>
      <action type="Rewrite" url="http://localhost:8080/{R:1}" />
    </rule>
    <rule name="realblog">
      <match url="^(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^realblog.leven.com.cn$" />
      </conditions>
      <action type="Rewrite" url="http://leven.com.cn/{R:1}" />
    </rule>
    <rule name="phpweb">
      <match url="^(.*)" />
      <conditions>
        <add input="{HTTP_HOST}" pattern="^phpweb.leven.com.cn$" />
      </conditions>
      <action type="Rewrite" url="http://localhost:8081/{R:1}" />
    </rule>
  </rules>
</rewrite>

访问结果分别为:

  和

  我们再添加最后一项,将http://localhost/leven 代理到 http://leven.com.cn/

复制代码 代码如下:

<rule name="leven.com.cn">
  <match url="^leven/(.*)" />
  <conditions>
    <add input="{HTTP_HOST}" pattern="^localhost$" />
  </conditions>
  <action type="Rewrite" url="http://leven.com.cn/{R:1}" />
</rule>

但是此时访问会出现问题,如下图:

  显然,出现了css丢失等情况,通过查看源码:

  可以看到css的路径有误,不仅如此,所有的img,a标签路径全部出现了错误,代理之后的地址是/leven/xxx的,但是源地址仍然是/xxx,因此我们还需要增加一个Outbound Rule

  配置好的config文件如下:

复制代码 代码如下:

<outboundRules>
  <rule name="Add application prefix">
    <match filterByTags="A,Img,Script,Link" pattern="^/(.*)" />
    <conditions>
      <add input="{URL}" pattern="^/leven/.*" />
    </conditions>
    <action type="Rewrite" value="/leven/{R:1}" />
  </rule>
</outboundRules>

然后刷新:

  可见路径正确.

  在使用了反向代理之后,编程上也有些地方需要注意了,在取客户端IP的时候,由于多了一层代理,直接是无法获取的,因此,我们需要开启

  然后通过获取Header中的X-Forworded-For字段来取得客户端IP

  从测试来看,ARR是个非常有用的代理模块,能完全满足我们反向代理的需求,不仅如此,ARR还提供了UrlRewrite,ServerFarms,Cache等很多功能,很是值得我们挖掘.

来源: 博客园 作者:Leven

时间: 2024-11-10 01:20:48

在IIS7中应用Application Request Routing配置反向代理的图文教程_win服务器的相关文章

在IIS7中应用Application Request Routing配置反向代理的图文教程

在IIS7之前,在windows上要实现该功能却不是一件容易的事情,但是在IIS7上,通过Application Request Routing模块,我们可以轻松实现反向代理   在配置web服务器的时候,我们经常遇到这样的问题,由于某些原因,该服务器只能拥有一个公网IP,但是可能需要提供其他机器或者本机上其他 webserver的服务器给访问者,同时又不希望使用其他端口,如果在linux下,常见的解决方案是使用nginx作为前端server,通过反向代 理间接访问其他webserver.在II

Apache中如何按照端口号配置反向代理

Xml代码 Listen 8001 Listen 8002 <VirtualHost _default_:8001> ProxyPass /bob http://192.168.254.30:8001/bob ProxyPassReverse /bob http://192.168.254.30:8001/bob </VirtualHost> <VirtualHost _default_:8002> ProxyPass /bob https://192.168.254.

Windows 2008 IIS7.5中创建独立账号的FTP站点图文教程_win服务器

Windows 2008上的IIS7.5,FTP功能已经非常强大了,完全不下于Serv-U这样的第三方软件.本文小编就介绍在IIS7.5上配置独立账号的FTP站点. 1.创建Windows账号 右击点击"我的电脑",选择"管理"打开服务器管理的控制台.展开"服务器管理器",一路展开"配置"."本地用户和组",点"用户"项.然后在右边空白处点右键,选择"新用户"将打开新

在IIS 7中配置PHP运行环境简单步骤[图文教程]_win服务器

安装 IIS 7.0         打开 Control Panel\Programs\Programs and Features\Turn Windows features on or off, 在打开的对话框中勾选上这两个选项:         单击OK等待片刻, IIS就安装完成了. 安装 PHP 5.2.6         1. 下载: PHP 5.2.6 ;  其它版本的 PHP 下载.         2. 将压缩包解压, 放到一个目录中, 比如 D:\php         3.

Windows中IIS内FTP服务器高级配置图文教程_win服务器

提到FTP服务器,可能大家都会想到Serv-U.vs-FTP等软件,其实微软内置在IIS里的FTP服务已经够用,不信请往下看. 实现对多用户的管理 首先需要取消"站点属性/允许匿名连接",如图1. 接着进入"计算机管理/本地用户和组",新建立一个组,这里建立为FTPuser,然后新建立一个用户FTP01,然后修改FTP01的属性,把它加入FTPuser组,去掉系统默认的users组.在NTFS格式分区下(这里为d盘)创建文件夹FTP01和FTP02,然后设置安全权限

IIS6下配置fastcgi的php的教程_win服务器

FastCGI的IIS模块可以让流行的应用框架在IIS上支持FastCGI协议以提供高性能和可用性的访问服务,FastCGI面向现有的网络服务器提供高性能的CGI替代标准.具体PHP 安装方法我记录下来,其中包括出现的一个错误.环境: 操作系统:Windows 2003 Server PHP版本:PHP5.25 1.下载FastCGI For IIS6 http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4

Win2008 R2 IIS7 PHP 5.4 环境搭建图文教程_win服务器

作者:夏明亮 今天的文章思路是按照先发现问题,然后想办法解决,最后验证问题解决的情况常规思维路线来走的,比较符合现实中的情况,这样大家看起来也会比较容易. 首先,发现问题 今天我想自己搭建一个小小的PHP网站,由于我身边已经有了Windows Server 2008 R2的服务器环境,并且我本人对Windows 的东西比较了解所以决定利用R2 的IIS Server来实现PHP网站的搭建,最开始在网上查些资料,看看需要安装些什么组件,这一步蛮重要的,大家最好多看些资料,否则即使最终大家实现了目的

IIS中给网站添加匿名访问用户图文教程_win服务器

在网上找了许久,实在是找不到一篇讲述网站匿名用户的文章,网上太多文章都是夸夸而谈,讲述诸般大道理,却完全没落到实处,与匿名用户相关的文章不少,但讲述网站匿名用户建立步骤的文章却没有. 这是一个正常的现像,懂的人觉得太简单,不想敖述.不懂的人完全看不懂,看着那些高调的言谈,有如在查天书.还有一类不懂装懂的,在网站随意发布文章,留下百般漏洞. 最讨厌某些人,一知半解,经常劝别人给某个网站目录加EVERYONE权限,呵呵,真要照这帮人的说法设置,随便懂点的人轻轻松松就拿下服务器. 废话不多说,现在来看

win7下IIS的安装和配置 图文教程_win服务器

最近工作需要IIS,自己的电脑又是Windows7系统,找了下安装的方法,已经安装成功.在博客里记录一下,给需要的朋友,也是给自己留个备份,毕竟我脑子不是很好使. 一.首先是安装IIS.打开控制面板,找到"程序与功能",点进去 二.点击左侧"打开或关闭Windows功能" 三.找到"Internet 信息服务",按照下图打勾即可 等待安装完成 四.安装完成后,再回到控制面板里面,找到"管理工具",点进入 五.双击"I