最近在做小程序的项目,微信要求所有数据请求通道都要走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的时候,一定要记得勾选。

【运维】在Windows上使用IIS方向代理配置Websocket的更多相关文章

  1. 开发便于运维的Windows服务

    过去几个月,DevOps on Windows网站推出了一系列文章,详细讲解了开发者应怎样创建便于运维的Windows服务.这一系列文章详细分析了如何克服在运维部门看来最困难的部分:Windows服务 ...

  2. windows上redis的安装和配置

    windows上redis的安装和配置 进入到Redis的根目录D:\Programming\Redis\Redis6379\Redis-x64-3.2.100底下操作: 配置文件启动 redis-s ...

  3. Windows上Ruby开发环境的配置

    最近公司项目上有需要,需要开发一个puppet的自动化工具,这个工具需要操作存储设备上的各种资源,而鉴于puppet不是善于完成这个任务的首选语言,于是我们选择了puppet的“爹”,Ruby. 熟悉 ...

  4. Nginx在windows上安装 及 Nginx的配置及优化

    https://www.cnblogs.com/Chiler/p/8027167.html http://www.runoob.com/linux/nginx-install-setup.html 前 ...

  5. IIS反向代理配置教程(最终完整版本)

    IIS代理配置教程 插件下载:https://download.csdn.net/download/song_yan_/11996489 一.安装反向代理插件 1.rewrite插件安装 (1) 双击 ...

  6. 【服务器运维】Windows Server 2008 R2 下配置证书服务器和HTTPS

    前言 2017年1月1日起App Store上的所有App应用将强制开启ATS功能. 苹果的ATS(App Transport Security)对服务器硬性3点要求: ① ATS要求TLS1.2或者 ...

  7. 桌面运维之Windows快捷键,每一个工程师都是“快捷键”的工程师!

    1.win快捷键 首先教大家win7新增的3D效果: Win + Tab 快速切换已打开的程序(和Alt+tab一样的效果) Win + Home 将所有使用中窗口以外的窗口最小化 Win + Spa ...

  8. 【Linux运维】Centos7上借助ansible搭建LVS+Keepalived

    安装ansible 安装ansible: [root@localhost ~]# /etc/hosts 192.168.19.129 web129.yanglt.com web129 192.168. ...

  9. 运维笔记--线上服务器git环境配置

    场景描述: 我们采用git去管理代码分支,本地开发环境,线上服务器多数情况下也会使用git去管理程序代码,那么新的一台服务器,如果指定了目标路径作为代码存放路径,该如何配置git环境, 以达到跟远程服 ...

随机推荐

  1. Linux-网络管理

    网络管理 一 基本网络配置 linux操作系统,以太网卡用“eth”表示网卡:序号从零开始eth0代表到系统能够识别的第一个网卡eth1....第2个网卡 查看网卡信息 查看网卡信息 查看当前系统所连 ...

  2. 深入理解JVM(7)——线程安全和锁优化

    Java中的线程安全 按照线程安全的“安全程度”由强至弱来排序,可以将Java语中各种操作共享的数据分为以下5类:不可变. 绝对线程安全. 相对线程安全. 线程兼容和线程对立. 1.不可变 不变的对象 ...

  3. centos下彻底删除mysql的方法

    本文记录了CentOS下MySQL的彻底卸载,供大家参考,具体内容如下: 1.查看MySQL是否安装 方式1: [root@localhost usr]# yum list installed mys ...

  4. 前端三剑客:html,css,JavaScript

    一.前端概念 二.html详细介绍 三.css基础 四.css盒模型 五.css高级布局 六.JS基础 七.JS常用类 八.JS基础操作 九.JS高级与事件 十.BOM与DOM 十一.jQuery初识 ...

  5. django 3.post接口开发

    如果有了一个项目,还想创建一个项目,那么就是进入项目的路径下,运行命令,比如: cd /Users/newcomer/PycharmProjects/djangoProject python3 man ...

  6. Vue(服务端渲染)

    一.前言 1.服务端渲染图解                                                 2.简介服务端渲染                             ...

  7. session常用对象

    1.object getArrtibute(String name) 获取与名字name相联系的属性 2.void setArrtibute(String name,object) 设置指定名字的属性 ...

  8. 002 网上看的unity学习路线

  9. HBase基本概念与基本使用

    1. HBase简介 1.1 什么是HBase HBASE是一个高可靠性.高性能.面向列.可伸缩的分布式存储系统,利用HBASE技术可在廉价PC Server上搭建起大规模结构化存储集群. HBASE ...

  10. python 高级部分精华--那些书本不会告诉你的坑

    递归目录生成器方式, else 里的 tmp 显示获取 yield 不可缺少 , 递归算法中若要使用生成器,需要在生成器的原函数(首次调用)显式得到所有yield值 def get_file_recu ...