iis转发

用IIS进行请求转发,调用现有接口回应请求,剩余部分开发新的api,部署在一个项目里,用URL Rewrite进行过滤分发。

需要依赖IIS插件(Application Request Routing + URL Rewrite)。

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

http://www.iis.net/downloads/microsoft/application-request-routing#additionalDownloads

http://www.iis.net/downloads/microsoft/url-rewrite#additionalDownloads

安装好插件,重新打开IIS


双击IIS根目录

iis转发_第1张图片



双击Application Request Routing Cache

iis转发_第2张图片

双击右边的 Server Proxy Settings

iis转发_第3张图片



勾上 Enable proxy

iis转发_第4张图片


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



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

iis转发_第5张图片
iis转发_第6张图片



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 忽略大小写

iis转发_第7张图片



展开 Conditions 条件筛选

Logical grouping 选择 Match Any

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

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

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

iis转发_第8张图片



点击 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 忽略大小写

iis转发_第9张图片



双击展开 Action 部分

Action type 选择 Rewrite 重写转发

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

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

iis转发_第10张图片

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


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

现有的需要转发的 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 忽略大小写

iis转发_第11张图片

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

iis转发_第12张图片

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

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

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

你可能感兴趣的:(iis转发)