IIS实现HTTP和WebSocket服务的反向代理

一.前言

首先我们来聊聊反向代理,所谓的反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请求连接的客户端,此时代理服务器对外就表现为一个反向代理服务器。

二.举例

以我遇到的情况为例,我有一个使用.net core开发的控制台应用程序项目,我想使用命令行或者服务来启动发布好的项目,使用二级域名来访问,但是问题来了无论我怎么操作都无法将域名跟我的项目绑定,只能绑定IP,我使用的是UseUrls的方法,也不知道是不是我的用法错了,反正只是作为一个讲解的例子,大家不用深究。这个时候我就想到了另一种方式,能不能在访问二级域名时跳转到项目绑定的IP端口上呢,而且我返回的结果还得通过二级域名发送出去,这时候我需要一个代理服务器来做这个事,这个代理就是IIS。

三.准备

Windows Server 2008 R2

IIS7

Application Request Routing(IIS插件需要另外安装,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=47333

URL Rewrite(IIS插件需要另外安装,下载地址:https://www.iis.net/downloads/microsoft/url-rewrite

四.开始

第一步、确认IIS上有安装ARP(Application Request Routing)以及URL Rewrite

第二步、启动代理:

IIS实现HTTP和WebSocket服务的反向代理

 IIS实现HTTP和WebSocket服务的反向代理

 IIS实现HTTP和WebSocket服务的反向代理

 配置完成后别忘了点应用。

第三步、新增反向代理服务器,设置反向代理URL规则

选中IIS中的一个网站,然后点击URL重写模块。在右侧点击【添加规则】--【入站规则】 -- 【空白规则】

IIS实现HTTP和WebSocket服务的反向代理

 IIS实现HTTP和WebSocket服务的反向代理

 IIS实现HTTP和WebSocket服务的反向代理

 IIS实现HTTP和WebSocket服务的反向代理

上图配置说明:

Name:随意填写

Requested URL:选择"Matches the pattern",匹配模式

Using:选择“Regular Expressions”,正则表达式匹配

Pattern:填写^(.*)

Action Type:选择Rewrite,重写

Rewrite URL:填写需要被代理的网站地址,最后加上{R:1}即可,如:http://localhost:5520/{R:1}

最后点击应用即可。到此为止便完成了HTTP的反向代理。有兴趣的朋友可以自己多尝试,不同端口之间的代理也是可以的。

五.WebSocket的反向代理

websocket的反向代理的方法与HTTP基本一致,就只是在上述的操作中再加一条规则就好了。注意一下,只有IIS8.0以上才支持websocket。

重新添加一条规则,名称啥的都跟上面一样我就不重复说了。不同的是下面两个配置:

Conditions添加两条规则,匹配模式分别是 (.+)s:// 和 (.*)s://

IIS实现HTTP和WebSocket服务的反向代理

Rewrite URL改为:{C:1}://需要代理的项目地址/{R:1}

IIS实现HTTP和WebSocket服务的反向代理

最后得到以下两个规则:

IIS实现HTTP和WebSocket服务的反向代理

以上。