GatewayWorker 配置 WSS 服务踩坑纪实

本文是 【ThinkPHP5 集成使用 GatewayWorker 进行即时通信的配置操作】 的姊妹篇,是对 WSS服务 的配置延伸…

  • 首先,本地开发的测试一般都能通信成功

  • 而且,如果客户端为 【http】网络协议的网站,
    那么 js 代码基本就是类似—— var ws = new WebSocket("ws://47.104.110.54:8283"); 的连接方式
    出错率是很低的,基本不做赘述

  • 最大的难点,个人认为是 WSS 服务配置

【操作环境】
		系统: 	CentOS7.2
		服务:	阿里云服务器
		管理工具:	宝塔(Linux)管理面板

【报错信息】

首先,如果直接将本地开发成功的 GatewayWorker 服务部署到线上,作为鄙人这样的新手,最先遇到的应该是类似如下的报错:

lists.html:187 Mixed Content: 
The page at 'https://www.fetow.com/cmsx.html' was loaded over HTTPS, 
but attempted to connect to the insecure WebSocket endpoint 'ws://47.104.0.54:8283/'. 
This request has been blocked; this endpoint must be available over WSS.
  • 截图如下:

  • 报错原因:
    这是由于不同网络协议之间 websocket 通信受限制造成的
    意思是我客户端所在域名网站使用的是 https 协议,
    而所请求的【 gatewayWorker服务器 】却是 http 协议的域名数据,被浏览器认为是不安全的,所以被阻止了

    这种情况,根据文档指示,我们接下来最需掌握的就是 【 创建wss服务的技巧


【知识点】
	wss 协议实际是 websocket+SSL,
	就是在 websocket 协议上加入 SSL 层,类似 https(http+SSL)。 
	所以只需要在 websocket 协议的基础上开启 SSL 即可支持 wss 协议 !

下面,我根据对 workerman手册创建CSS服务】 参考的操作,介绍如下两种方式

第一种方式 、直接用 Workerman 开启 SSL

  • ①. 下载SSL 证书
    首先要知道的是:证书一般是与域名绑定的
    对于获得 SSL 证书的方式可能有所不同,以我为例:
    我在阿里云下载了证书(pem/crt 文件及 key文件)放在【gatewayWorker 服务器】的磁盘目录 /mooz/GatewayWorker/fetow.com_nginx

  • ②. 然后修改了【gatewayWorker 服务器】中的 start_gateway.php文件,以支持 WSS 服务
    同时,我选用的并非手册推荐的【443】端口,而是 【8283】

在这里插入图片描述

  • ③. 解析域名
    首先,手册中提到的这句 : 【证书一般是与域名绑定的,所以测试的时候客户端请使用域名连接,不要使用 ip 去连】
    那么,必然用到了域名解析的操作
    此处,我在前面证书所对应的域名下,补充了对 【gatewayWorke 服务器】的解析绑定 【极其重要】


【注】 : 别的操作不清楚,但是在我这里,域名的解析有一段的生效时间,一般在十分钟内!

  • ④. 客户端连接测试

    如此一来,客户端的连接代码为:var ws = new WebSocket("wss://mozxx.fetow.com:8283");


第二种方式、 利用 nginx 代理 wss

通讯原理及流程:
	1、客户端发起 wss 连接连到 nginx
	2、nginx 将 wss 协议的数据转换成 ws 协议数据并转发到 Workerman 的 websocket 协议端口
	3、Workerman 收到数据后做业务逻辑处理
	4、Workerman 给客户端发送消息时,则是相反的过程,数据经过 nginx 转换成	wss	协议然后发给客户端

注意:此方法 workerman 部分千万不要设置 ssl,否则将无法连接

  • ①. 首先就是对 【gatewayWorker 服务器】中 start_gateway.php文件的处理
    为了对比,此处鄙人设置的是端口【8284】
    如果你是用了下载的压缩包,此处其实也就只是改了一下端口号 (建议跟第一种方式的操作代码进行对比研究)

  • ②. 安装并进行 Nginx 网站的配置操作

    因为鄙人使用的是 【宝塔(Linux) 面板管理系统】,操作起来要方便一点

    首先便是创建站点 (其中添加的域名来源,便是第一种方式中提及的 【步骤 ③. 解析域名】)

    然后,便是 SSL 证书的配置
    (图示为使用【宝塔管理系统】的界面,只是为了方便操作,根据手册上的介绍也可以实现,毕竟目的是一样的)

    最后,便是在配置文件中,补充一个 wss 的代理入口 (鄙人定的入口为 "moz_wss")

注意: 一切配置完毕,要重启 Nginx 服务

  • ③. 此方式,要求对端口【443】的开放

    如果是 阿里云服务器 ,还需要进行 安全组的设置

  • ④. 客户端连接测试
    如此一来,客户端的连接代码为:var ws = new WebSocket("wss://mozxx.fetow.com/moz_wss");


【附录】

  • 每次修改 "start_gateway.php" 文件后,要对 【gatewayWorker 服务器】的 workerman 进行重启操作

在这里插入图片描述

	一个人在开发学习过程中
	很容易卡在各种百度大半天出不来的 BUG 里
	如果有机会,建议问下周围的人,毕竟当局者迷啊
	此外,如果遇到了很奇怪的问题或者终于解决了一个复杂的需求
	那就整理出来经验文章吧,也能帮到更多的小伙伴
	然后,好好充电,升职加薪,FIGHTING !!!
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
OpenResty 是一个基于 Nginx 的高性能 HTTP 及 WebSocket 代理服务器,它扩展了 Nginx 功能,支持 Lua 脚本,非常适合构建动态 Web 应用和 RESTful 服务配置 WSS(WebSocket over SSL/TLS)使得WebSocket连接可以在安全的 HTTPS 协议下进行。 以下是配置 OpenResty 以启用 WSS的基本步骤: 1. **安装 OpenSSL**: 确保您的 OpenResty 安装已包含 OpenSSL 支持。如果尚未安装,可以通过包管理器或源码安装。 2. **配置 Nginx SSL 证书**: 在 Nginx 配置中添加 SSL 证书和私钥,例如: ```nginx server { listen 443 ssl; ssl_certificate /path/to/your/cert.crt; ssl_certificate_key /path/to/your/private.key; # 加密套件和其他SSL选项可以在这里设置 ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:SEED+AES:RSA+EECDH:!aNULL:!MD5; } ``` 3. **启用 WebSocket 配置**: 在 Nginx 或 Lua 过滤器模块(如 OpenResty 的 ngx_openresty)中,启用 WebSocket 支持。比如,在 Nginx 的 `server` 块中添加以下配置: ```nginx location /ws { proxy_pass http://your-backend-endpoint; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } ``` 这里假设后端应用监听的是 `http://your-backend-endpoint`。 4. **启用 WSS**: 添加 `listen` 语句,指定使用 SSL,如: ```nginx server { listen 443 ssl; # ... 其他SSL配置 ... location /ws { # ... WebSocket配置 ... proxy_protocol on; ssl_protocols TLSv1.2 TLSv1.3; # 如果需要客户端证书验证,可添加类似以下内容: ssl_verify_depth 10; ssl_client_certificate /path/to/client.crt; ssl_verify_mode ssl_verify_peer; } } ``` 5. **启动 Nginx**: 保存配置后,重启或重新加载 Nginx 以应用新配置
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值