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

PHP 586 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证书+代理,参考代码如下:

PRETTYPRINT
www.hilo8.com
  1. <VirtualHost *:443>
  2. DocumentRoot "C:\wwwroot\website"
  3. ServerName www.hilo8.com
  4. # 代理配置
  5. SSLProxyEngine on
  6. ProxyRequests Off
  7. ProxyPass /wss ws://127.0.0.1:2345/wss
  8. ProxyPassReverse /wss ws://127.0.0.1:2345/wss
  9. # 添加 SSL 协议支持协议,去掉不安全的协议
  10. SSLProtocol all -SSLv2 -SSLv3
  11. SSLEngine on
  12. SSLCipherSuite ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP:+eNULL
  13. SSLCertificateFile "${SRVROOT}/ssl/domain.crt"
  14. SSLCertificateKeyFile "${SRVROOT}/ssl/domain.key"
  15. SSLCertificateChainFile "${SRVROOT}/ssl/chain_ca.crt"
  16. <Directory "C:\wwwroot\website">
  17. SSLOptions +StdEnvVars
  18. AllowOverride All
  19. Require all granted
  20. </Directory>
  21. </VirtualHost>


四、客户端连接测试

LANG-JS
www.hilo8.com
  1. // 证书是会检查域名的,请使用域名连接。注意没有端口
  2. ws = new WebSocket("wss://域名.com/wss");
  3. ws.onopen = function() {
  4. alert("连接成功");
  5. ws.send('tom');
  6. alert("给服务端发送一个字符串:tom");
  7. };
  8. ws.onmessage = function(e) {
  9. alert("收到服务端的消息:" + e.data);
  10. };

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

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

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

讨论数量:0

请先登录再发表讨论。 2025-04-08

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