【运维】在Windows上使用IIS方向代理配置Websocket
最近在做小程序的项目,微信要求所有数据请求通道都要走https或wss。而我们的项目建设如下:
api基于C#的MVC webapi开发。
websocket基于Nodejs的thinkjs框架开发。
因此会导致一个要求,就是api暂时不支持.net core,因此只能部署在windows下,使用IIS作为web服务器。又因为IIS占用了80端口,因此没法用nginx作为反向代理。
经过一番研究后发现,IIS8以上版本可以作为反向代理服务器。因此只要将IIS作为反向代理服务器,将SSL证书和域名绑定到IIS上,再通过IIS新增的URL重写模块将请求转向给内部的websocket服务就可以了。
具体操作如下:
一、下载ARR
下载地址:http://www.iis.net/downloads/microsoft/application-request-routing
下载完后无脑点击运行,一直点下一步就可以了。
二、启动Proxy
三、新增反向代理服务器,设置方向代理URL重写规则
在IIS中新增一个网站,然后点击URL重写模块。在右侧点击【添加规则】--【入站规则】 -- 【空白规则】
将URL的匹配模式设置成^(.*),再将重写URL设置成:http://localhost:8361/{R:1}
举个例子:
入站前:http:www.beta.com/?params=1
重写后:http://localhost:8361/params=1
这样通过这个规则,可以将URL从域名转换成内部的局域网URL
四、设置websocket重写规则
在步骤三中,可以通过反向代理服务器将外部访问的URL请求转成内部的URL请求。
但是,别忘记我们这个是一个websocket专用的反向代理服务器。
而websocket在请求的时候,不是http://开头,而是以ws://开头。因此我们要重新配置一下。
在条件中加入以下配置:
同时将重写URL改成:
这么些是什么意味呢?
就是说如果是http请求:
入站前:https:www.beta.com/?params=1
重写后:http://localhost:8361/params=1
如果是ws请求:
入站前:wss:www.beta.com/?params=1
重写后:ws://localhost:8361/params=1
这样既能应对http请求的URL转换,又能应对websocket的URL转换。
心细的朋友可能是注意到,为什么要将https转成http,将wss转成ws。
这就回到问题的原点,因为小程序的请求规则里要求,所有数据请求通道都要走https或wss。所谓外部过来的请求必然要带https或wss。但是内部处理的时候又不需要带SSL认证,因此需要将头里面的s给去掉。
五、绑定SSL证书和域名
此时,我们只要将SSL证书和域名绑定到代理服务器上就行了。具体就不多说了。
只是有一点要特别注意一下,因为IIS只支持一个SSL,多个网站绑定不同的SSL证书时会导致443端口冲突。因此在绑定https的时候,一定要记得勾选。
最新文章
- JAVASCRIPT 中 FOR (VAR I IN DATA) 循环数组项
- SQL 使用 AND 与 OR
- android 学习运用海马模拟器教程与android环境的搭建
- Windows 8 电话激活密钥。(更新至 2013-07-21)
- codeforces 390E 	 Inna and Large Sweet Matrix
- day 05
- Optaplanner规划引擎的工作原理及简单示例(1)
- 二叉搜索树的第K大节点
- 开启Tomcat的manager页面访问
- GitHub &; OAuth 2.0 &; JWT
- 关于VC工程编译不过去这件事
- [jQ]jQuery显式操作Checkbox,并用数组存储关联值的方案
- 【bzoj3238】 Ahoi2013—差异
- Nmap介绍
- Hello Vizhub
- Javascript中的名词
- Python学习-赋值、浅copy和深copy
- SQL语句详细汇总[转]
- IDC机房与阿里云vpc网络建立高速通道
- C++ 关于运算符重载