• IIS实现Nginx功能:转发


    这个标题本身是不合理的,但是基于目前公司有一份系统是外部代理商贴牌使用,有一个老的站点是部署在IIS上,好多代理商自己的域名绑定在这个上面,而近期新版本的系统已经上线,那么需要将这些域名也转发到新的站点上。目前有两个问题:(1)这台服务器无法去安装Nginx,因为需要占用80端口,那么服务器上的所有站点都需要重新配置,我们的业务场景要求我们不能随意停机维护;(2)解析到别的服务器用nginx转发,因为也讲到了,这个站点上绑定了很多自定义的域名,要通知客户去更新解析是一件很难的事情。

    这样一来就想到了是否可以用IIS来实现Nginx的功能,经过网络搜索,试验,最终确实可行,以下即为响应的流程:

    1. 检查IIS是否支持

     如没有,则先下载ARR 和 URL Rewrite 进行安装,使用过程中发现ARR对IIS的“目录浏览”功能有依赖(未验证,如果无法使用,可以查看一下是否安装了“目录浏览”功能):

    【Application Request Routing】 http://www.iis.net/downloads/microsoft/application-request-routing#additionalDownloads

    【URL重写】http://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads

    PS:安装会导致IIS重载,会有那么几秒钟的闪停!!!

    2. 开始配置

    双击IIS根目录

     

    双击Application Request Routing Cache

    双击右边的 Server Proxy Settings

    勾上 Enable proxy

    取消勾选“Reverse rewrite host in response headers”,否则所有的响应内容的host都会被重写为当前站点域名,简单来讲,最直接的影响就是对外部站点的重定向都会失败,所以这里取消勾选。

     

    点击“应用”后,新建一个站点,用来接受请求做转发

    双击站点,双击 URL Rewrite -> Add Rules(新建规则) -> Blank rule(空白规则) 

    Name:填写你的规则名称

    Match URL 是匹配Requested URL的规则

    http://www.test.com?name=michael&age=30

    host: www.test.com

    requested url: ?name=michael&age=30

    query string: name=michael&age=30

    Requested URL 选择 Matches the Pattern (匹配符合规则的url)

    Using 选择 Regular Expressions (使用正则表达式来匹配)

    Pattern 里填写 ^(.*) 这里不对正则表达式做讲解,有需要的可以自己了解。

    勾选 Ignore case 忽略大小写

    展开 Conditions 条件筛选

    Logical grouping 选择 Match Any

    Match All 是列表中所有规则都要匹配才符合(与)

    Match Any 是列表中有一个规则匹配就算符合(或)

    track capture group across conditions 跟踪捕获组,这个功能跟正则有关,这里不需要不勾选,可以查询关键词 capture group  自行了解详情

    点击 Add 添加条件 

    Condition input 填写  {HTTP_HOST}  ,HTTP_HOST 代表请求头里的host,就是上面例子里的 www.test.com 部分, 更多可过滤条件查询 Server Variables  自行了解

    Check if input string 选择 Matches the Pattern 

    Pattern 填写 ^arrtest.com$  ,这里的意思是如果host是 arrtest.com 则匹配通过,例:http://arrtest.com?asdf=1234

    如果这里填写的是 ^www.arrtest.com$  ,则匹配 http://www.arrtest.com?asdf=1234

    勾选 Ignore case 忽略大小写

    双击展开 Action 部分

    Action type 选择 Rewrite 重写转发

    Rewrite URL 里填写 https://cn.bing.com/{R:0} 转发目标地址, {R:0} 代表 Match URL 部分匹配到的 Request URL 

    勾选 Append query string 追加查询字符串 

      

    到此配置结束,保存这个规则,在浏览器访问 http://arrtest.com/search?q=测试 就等同于访问 https://cn.bing.com/search?q=测试  

    PS:“停止处理后续规则”选项可用于多个规则中,比如可以设定某些匹配项,不进行转发,可以勾选该选项

    为了防止该站点下的其他接口被这个规则无脑转发,我们需要新增一个转发条件

    现有的需要转发的 API 格式如下 http://arrtest.com?PROTOID=123456 

    其他接口是没有 PROTOID 这个关键词的,并且 PROTOID 后面的value都是数字,那么这里就用这个关键词来过滤需要转发的请求

    再回到刚刚的 Conditions 部分,点 Add 新增条件

    Condition input 填写 {QUERY_STRING} 

    Check if input string 选择 Matches the Pattern

    Pattern 填写 PROTOID=d+ 这个规则的意思是,匹配查询字符串为 PROTOID 开头参数值为数字的请求(例:http://arrtest.com/?PROTOID=456789)

    勾选 Ignore case 忽略大小写

    确定保存,修改 匹配逻辑为 Match All (与),列表内所有的规则都匹配,请求才会通过

    现在只有 QueryString 为 PROTOID 开头参数值为数字的请求才会被转发了

    例子:http://arrtest.com/search?PROTOID=4564&q=测试   =>   http://cn.bing.com/search?PROTOID=4564&q=测试

    http://arrtest.com/search?q=测试&PROTOID=4564  则不会被转发 

    至此请求转发的功能就实现了,除此之外,强大的 ARR + URL Rewrite 还可以实现高可用负载均衡。

  • 相关阅读:
    Android 实现Path2.0中绚丽的的旋转菜单
    Android SQLite数据库增删改查操作
    Android addRule()
    Android 实现全屏、无标题栏
    微信公众号开发教程
    HEAP CORRUPTION DETECTED
    Introduction to gaussian filter 高斯滤波器
    Windows 7硬盘安装CentOS 6.4 双系统 (WIN7硬盘安装Linux(Fedora 16,CentOS 6.2,Ubuntu 12.04))
    使用Scala操作Mongodb
    数字三角——递归、递归、内存搜索
  • 原文地址:https://www.cnblogs.com/mojinxun/p/13665726.html
Copyright © 2020-2023  润新知