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
打完收工!

浙公网安备 33010602011771号