利用apache代理SSL创建Workerman(websocket)的wss服务

PHP 142 0 2024-07-09

利用apache代理SSL创建Workerman(websocket)的wss服务

一、简述

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

二、通讯原理及流程

1、客户端发起wss连接连到apache。

2、nginx/apache将wss协议的数据转换成ws协议数据并转发到Workerman的websocket协议端口。

3、Workerman收到数据后做业务逻辑处理。

4、Workerman给客户端发送消息时,则是相反的过程,数据经过apache转换成wss协议然后发给客户端。

三、配置Apache

1、启用模块

在httpd.conf配置文件里找到以下两行并去掉前面的“#”注释号

LoadModule ssl_module modules/mod_ssl.so  

Include conf/extra/httpd-ssl.conf

2、配置SSL及代理

在extra/httpd-ssl.conf配置文件里配置站点+SSL证书+代理,参考代码如下:

<VirtualHost *:443>
DocumentRoot "C:\wwwroot\website"
ServerName www.hilo8.com

# 代理配置
SSLProxyEngine on

ProxyRequests Off
ProxyPass /wss ws://127.0.0.1:2345/wss
ProxyPassReverse /wss ws://127.0.0.1:2345/wss

# 添加 SSL 协议支持协议,去掉不安全的协议
SSLProtocol all -SSLv2 -SSLv3

SSLEngine on
SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
SSLCertificateFile "${SRVROOT}/ssl/domain.crt"
SSLCertificateKeyFile "${SRVROOT}/ssl/domain.key"
SSLCertificateChainFile "${SRVROOT}/ssl/chain_ca.crt"
<Directory "C:\wwwroot\website">
    SSLOptions +StdEnvVars
    AllowOverride All
    Require all granted
</Directory>
</VirtualHost>


四、客户端连接测试

// 证书是会检查域名的,请使用域名连接。注意没有端口
ws = new WebSocket("wss://域名.com/wss");

ws.onopen = function() {
    alert("连接成功");
    ws.send('tom');
    alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
};

参考来源:https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html

上一篇:php pdo 对数据库表的操作,包括创建表、删除表、添加新字段名、修改字段名

下一篇:workerman开发中遇到的常见问题和解决方法

讨论数量:0

请先登录再发表讨论。 2024-09-08

天涯网魂
3 杠 5 星
TA 的文章
TA 的随言
TA 的资源链