• 【运维】在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的时候,一定要记得勾选。

           

  • 相关阅读:
    JS笔记之第七天
    JS笔记之第六天
    JS笔记之第五天
    JS笔记之第四天
    JS笔记之第三天
    JS笔记之第二天
    JS笔记之第一天
    PHP文件上传
    bit、Byte、bps、Bps、pps、Gbps的单位的说明及换算
    Redis初级安装及使用
  • 原文地址:https://www.cnblogs.com/nonkicat/p/10672787.html
Copyright © 2020-2023  润新知