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
第二步、启动代理:
配置完成后别忘了点应用。
第三步、新增反向代理服务器,设置反向代理URL规则
选中IIS中的一个网站,然后点击URL重写模块。在右侧点击【添加规则】--【入站规则】 -- 【空白规则】
上图配置说明:
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://
Rewrite URL改为:{C:1}://需要代理的项目地址/{R:1}
最后得到以下两个规则:
以上。