thinkphp6---宝塔nginx-websocket连接wss

基础环境:thinkphp6-https-ssl+nginx

搭建一个websocket其实非常简单,可以参考我的这篇博文:

https://www.cnblogs.com/e0yu/p/18740184

可以参考:

按照这个流程使用在http的网站里面接入,使用 ws 是没有问题的,但是实际的生成应用里面,使用的https,那么就要使用 wss 不然无法连接。

配置折腾了我一天,但是学会了,就很简单。

我使用的是宝塔控制面板,域名,配置ssl证书这些都要先弄好。

找到对应的网站,点击【设置】选择【配置文件】

在配置文件里面进行配置:

示例代码:

# websockets
location =/socket {
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Nginx-Proxy true;
    proxy_pass http://localhost:2348;
    #proxy_http_version 1.1;
    #proxy_set_header Upgrade $http_upgrade;
    #proxy_set_header Connection "Upgrade";
}

重新运行即可成功:

前端使用:wss即可连接成功

以上参考:

https://blog.csdn.net/zp315379004/article/details/122448005

如何深入理解?

可以参考:创建wss服务:

https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html

我们使用的就是 nginx 代理ssl

nginx 截止到2025.3.27,最新版本才1.25,我用的是1.15使用也没有问题。

nginx配置参考如下:

server {
  listen 443;
  # 域名配置省略...
  ssl on;
  ssl_certificate /etc/ssl/server.pem;
  ssl_certificate_key /etc/ssl/server.key;
  ssl_session_timeout 5m;
  ssl_session_cache shared:SSL:50m;
  ssl_protocols SSLv3 SSLv2 TLSv1 TLSv1.1 TLSv1.2;
  ssl_ciphers ALL:!ADH:!EXPORT56:RC4+RSA:+HIGH:+MEDIUM:+LOW:+SSLv2:+EXP;

  location /ws
  {
    proxy_pass http://127.0.0.1:8282;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection "Upgrade";
    proxy_set_header X-Real-IP $remote_addr;
  }

  # location / {} 站点的其它配置...
}

测试:

// 证书是会检查域名的,请使用域名连接。注意这里不写端口
ws = new WebSocket("wss://域名.com/ws");
ws.onopen = function() {
    alert("连接成功");
    ws.send('tom');
    alert("给服务端发送一个字符串:tom");
};
ws.onmessage = function(e) {
    alert("收到服务端的消息:" + e.data);
};

总结:ws和wss的连接配置也是不同的:

ws连接的更多是一个端口:

var webSocket = new WebSocket("ws://192.168.0.113:2345");

但是wss连接的是域名:

var webSocket = new WebSocket("wss://www.aaa.com/ws");

理解也很简单:wss 就是在 ws 里面加入了 s,相当于是在 http 加入了 s 变成了 wss,而ssl证书是绑定到域名里面,所以这里连接的就是ssl证书绑定的域名。

然后就是理解nginx代理ssl:

注意:上面的测试都是在本地测试,所以都是 127.0.0.1 端口号:8282 是监听的端口。上线的时候,需要改为服务器的IP和服务器开放的端口号。

我的:

然后使用 wss :

var webSocket = new WebSocket("wss://www.aaa.com/ws");

就可以连接正常。

参考文档:

https://blog.csdn.net/gahsfjshf/article/details/144142849
https://www.workerman.net/doc/workerman/faq/secure-websocket-server.html

视频教程:

https://www.bilibili.com/video/BV1J64y1k7YC/?p=9&vd_source=eb3f5bb5e0c84a83e0634caa652b7d23

打完收工!

posted @ 2025-03-27 09:34  帅到要去报警  阅读(541)  评论(0)    收藏  举报