背景:项目遇到一个问题,要加上客服语音的功能,公司购买的是声网 sdk 服务,声网 sdk 必须在 https 和 localhost 上使用,而项目很特殊,需要本地启动的 localhost ,再用 iPad 通过 IP 访问。所以必须本地启一个https 服务。

https 服务的方案

想要启用 https 服务,想到几个方案:

  1. webpack-dev-server:
    • 通过 webpack-dev-server 可以配置 https , devServer: { https: true }即可。但项目有固定的项目启动方式,devServer 仅供开发。
  2. 适配https、wss:
    • 项目启动适配 https,但这样要修改项目原本启动代码,对其他业务可能有风险,且项目所用到的 websocket 也要同时从 ws 改成 wss 协议,所以这个作为备选方案。
  3. nginx 反向代理:
    • 另外起一个 nginx 代理服务,将 https 转发至 原本的 http,wss 也转发至 ws。看起来这种方案最好,不改变原有代码逻辑。

1. 生成自签名证书

起 https 服务需要有证书,因为是本地项目所以用自签名证书即可。openssl 来生成自签名证书。

  1. sudo openssl req -x509 -sha256 -nodes -newkey rsa:2048 -days 365 -subj
  2. "/C=US/ST=Oregon/L=Portland/O=Company Name/OU=Org/CN=localhost"
  3. -keyout /etc/letsencrypt/live/site.localhost/privkey.pem
  4. -out /etc/letsencrypt/live/site.localhost/fullchain.pem

浏览器一般会对自签名证书网站会有限制,但选择仍要访问即可。

2. nginx 配置 https 服务

待补充

  1. 监听端口号 记得加 ssl

3. 代理wss

(1)搭建最简单的ws服务
(2)ws测试连接工具
(3)location 正则匹配,nginx测试网站