一、背景

最近在做小程序开发,需要在nginx中配置websocket加密模式,即wss。初次配置wss时,踩了两个小时的坑,本文将踩坑过程分享给大家,有需要用到的伙伴可以直接copy即可实现,节省宝贵时间。
NGINX服务器配置实现加密的WebSocket连接WSS协议-LMLPHP

二、WebSocket网络通信协议介绍

WebSocket是一种网络通信协议,提供了一种在单个TCP连接上进行全双工通信的方式。WebSocket通信协议于2011年被IETF(互联网工程任务组)标准化为RFC 6455。
WebSocket协议有两种URI模式, 分别是:

  • ws://: 用于未加密的WebSocket连接;
  • wss://: 用于加密的WebSocket连接,类似于HTTPS。

wss://这种模式运作在TLS(传输层安全协议)之上,从而为WebSocket通信提供了加密和身份验证的功能。这对于防止中间人攻击和保护数据安全性非常关键,尤其是在传输敏感数据时。

要使用wss协议,服务器必须配置有效的SSL/TLS证书,这和配置HTTPS类似。当客户端通过wss://发起连接时,客户端和服务器之间会进行TLS握手,如果握手成功,之后的数据传输都将是加密的。

三、踩坑过程

初次配置,搜索了下,先看到了 https://developers.weixin.qq.com/community/develop/article/doc/000ca2306f8b180393dba276356413 ,被误解了,看了后,感觉很麻烦,看评论区,也有人在问按说的配置后,仍然无法实现,然后发现本篇只是一部分,又找到了另一部分 https://developers.weixin.qq.com/community/develop/article/doc/000c84d00087c0d497dbfca545d813,发现还需要借助第三方软件,看完文章,从常理思考,不应该这么复杂,所以就没有按这种方式进行尝试,已耽误了一些时间。

再次找到一个知乎上的 https://www.zhihu.com/question/285245830?utm_id=0, 关键配置截图如下:
NGINX服务器配置实现加密的WebSocket连接WSS协议-LMLPHP
copy关键配置到nginx,并修改为真实的服务器+端口, 但ngixn reload失败, 只检查了中英文符号,没有深究,关键是不熟悉,也没找到原因,后面才发现,upgrade应该是大写U才可以,这块测试验证也耽误了一些时间。

第三次找到https://blog.csdn.net/liulangerde/article/details/104571552, 关键配置截图如下:
NGINX服务器配置实现加密的WebSocket连接WSS协议-LMLPHP
看到这里Upgrade是大写,抱着死马当活马医的态度,修改试了下,居然真可以了。
NGINX服务器配置实现加密的WebSocket连接WSS协议-LMLPHP
NGINX服务器配置实现加密的WebSocket连接WSS协议-LMLPHP

四、总结:

Nginx的配置,作为程序员,并没有深入去学习,只是会常用的一些配置,nginx的文档也不常使用,通常都是抱着通过搜索快速找到答案想法,注定会踩了一些坑,后面试了GPT4,回答的结果也是小写的upgrade, 故分享给大家。

参考:https://developers.weixin.qq.com/community/develop/article/doc/000ca2306f8b180393dba276356413 这个是被误入歧途,耽搁了好久
https://www.zhihu.com/question/285245830?utm_id=0 小写问题,也没成功。
https://blog.csdn.net/liulangerde/article/details/104571552 这个直接复制,测试就可以了。

02-26 06:47