IIS反向代理解决前端跨域问题

前后端分离已经是主流的开发模式,后端提供WebApi服务,前端实现路由和页面逻辑和管理。通常前端采用Nodejs和React等工具技术栈。比如使用VSCode开发时,输入npm start或者npm start:no-mock,可以通过访问配置的代理地址,获取后端的WebApi服务。

然而当从开发环境中打包生成静态文件(npm build),发布到ngix或者iis等托管web服务器上时,会发现前端的代理设置无法直接访问到后端WebApi服务上。因此,需要在web服务器上配置反向代理,才能解决前端请求后端WebApi服务的问题。也就是反向代理解决前端跨域问题。

1 环境要求

iis需要满足iis7或者更高的版本

2 下载安装ARR

ARR全称为 Application Request Routing
http://www.iis.net/downloads/microsoft/application-request-routing

安装好后,在iis里能看到以下图

1

3 配置反向代理

点击上图ARR,启用反向代理配置
2
点击Server Proxy Settings

3
勾选Enable proxy

3.1 网站配置反向代理

在需要反向代理的Web网站上,点击该网站,能看到下图中的信息
4
双击URL重写,点击右侧的新建规则,再选择空白规则,确定

3.2 配置规则

3.2.1 配置匹配规则

5
根据反向代理的要求,可以部分或者全部进行反向代理配置。如上图所示,^api/(.*),表示只是匹配api/开头的网址进行反向代理。

如果需要全部匹配,则^/(.*)。

匹配规则下可以使用测试模式,如下图所示
6
如果输入的是api/home的网址,则匹配成功,同时请注意捕获组内的向后引用{R:0}和{R:1},在后续配置中会用到。

在测试模式中,如果匹配失败,如下图所示
7

3.2.2 配置条件规则

接下来配置条件规则,点击添加
8
输入{HTTP_HOST}, 模式内输入你网址的信息,如果是域名写域名,如果是IP写IP,根据网站的配置来定。

3.2.3 配置重写URL

之前通过配置匹配规则和条件规则,确定了在什么样的网址来源基础上来出发反向代理的条件,重写URL则是反向代理到目的网址上。通常目的网址和源网址是跨域的。
9
配置需要注意,必须以http://开头,否则的话会反向代理失败。其次,{R:0}和{R:1},该选择什么参数,由反向代理的需要来决定。
6
如果 www.source.com/api/home 需要到 www.dest.com/api/home,则需要{R:0}
如果 www.source.com/api/home 需要到 www.dest.com/home,则需要{R:1}

3.2.4 保存配置

点击应用该规则,回到IIS的网站选项上,点击重启服务即可重新使用。