NGINX服务器配置实现加密的WebSocket连接WSS协议

一、背景

最近在做小程序开发,需要在nginx中配置websocket加密模式,即wss。初次配置wss时,踩了两个小时的坑,本文将踩坑过程分享给大家,有需要用到的伙伴可以直接copy即可实现,节省宝贵时间。
在这里插入图片描述

二、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, 关键配置截图如下:
在这里插入图片描述
copy关键配置到nginx,并修改为真实的服务器+端口, 但ngixn reload失败, 只检查了中英文符号,没有深究,关键是不熟悉,也没找到原因,后面才发现,upgrade应该是大写U才可以,这块测试验证也耽误了一些时间。

第三次找到https://blog.csdn.net/liulangerde/article/details/104571552, 关键配置截图如下:
在这里插入图片描述
看到这里Upgrade是大写,抱着死马当活马医的态度,修改试了下,居然真可以了。
在这里插入图片描述
在这里插入图片描述

四、总结:

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 这个直接复制,测试就可以了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/2809044.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

1、权限维持域控后门SSP

用途:个人学习笔记,有所借鉴,欢迎指正! 欢迎新朋友 前言: 很多时候拿下了一台服务器权限后,可能过几天就会无法控制,因为企业都会有专业人士定期查杀后门、…

HDL FPGA 学习 - Avlon 总线,从端口传输、主端口传输,单周期、可变周期传输

目录 1.1 Avlon 总线 定制 外设 IP 核的框架 从端口传输 从端口信号类型 从端口传输模式列举 基本单周期读写传输 固定等待周期的读写传输 可变等待周期的读写传输(推荐) 具有建立时间和保持时间读写传输 主端口传输 主端口信号类型 主端口传…

通信入门系列——双边带信号、单边带信号、Hilbert变换

微信公众号上线,搜索公众号小灰灰的FPGA,关注可获取相关源码,定期更新有关FPGA的项目以及开源项目源码,包括但不限于各类检测芯片驱动、低速接口驱动、高速接口驱动、数据信号处理、图像处理以及AXI总线等 本节目录 一、双边带信号 二、单边…

flink sql 实战实例 及延伸问题:聚合/数据倾斜/DAU/Hive流批一体 等

flink sql 实战实例 及延伸问题 Flink SQL 计算用户分布Flink SQL 计算 DAU多topic 数据更新mysql topic接入mysql引入 upsert-kafka-connector 以1.14.4版本为例 数据倾斜问题:让你使用用户心跳日志(20s 上报一次)计算同时在线用户、DAU 指标…

1 easy 88. 合并两个有序数组

方法1: Arrays.sort //给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2,另有两个整数 m 和 n ,分别表示 nums1 和 nums2 中的元素数目。 // // 请你 合并 nums2 到 nums1 中,使合并后的数组同样按 非递减顺序 排列。 // // 注意&am…

Linux环境下C语言实现ping命令

Linux环境下C语言实现ping命令 涉及的知识点 Linux信号量的使用 SIGALRM信号是操作系统中的其中一个信号。他的作用是设置进程隔多久后会收到一个SIGALRM信号 #include <unistd.h> #include <stdio.h> #include <stdlib.h> #include <signal.h> …

SSM---Mybatis查询数据库的功能

Mybatis查询数据库的功能流程&#xff1a; 在maven中加入mybatis依赖&#xff0c;mysql驱动依赖创建一张student表创建表对应的实体类&#xff1a;student类&#xff0c;用来保存表中的每行数据创建持久层的DAO接口&#xff0c;用来定义操作数据库的方法创建这个表对应的sql映…

前端发送请求,明明登录进去了,为什么获取用户信息不行,后端总是识别不到token——跨域的问题

跨域问题 今天在对接前后端的时候&#xff0c;发现明明系统的登录接口都是好的&#xff0c;但是偏偏就是获取不到用户的信息&#xff0c;后端总是报错说读取不到有效的token。 总是说请求头中读取的token是null 在经过不断的排查和上网需求帮助的时候&#xff0c;我总结了以下…

JavaWeb——007MYSQL(DQL多表设计)

# 数据库开发-MySQL 一级目录二级目录三级目录 1. 数据库操作-DQL1.1 介绍1.2 语法1.3 基本查询1.4 条件查询1.5 聚合函数1.6 分组查询1.7 排序查询1.8 分页查询1.9 案例1.9.1 案例一1.9.2 案例二 2. 多表设计2.1 一对多2.1.1 表设计2.1.2 外键约束 2.2 一对一2.3 多对多2.4 案…

ROS2高效学习第四章 -- ros2 topic 编程之自定义 msg

ros2 topic 编程之自定义 msg 1 前言和资料2 正文2.1 两种自定义 msg 方式的讨论2.2 自定义 msg 独立存在2.2.1 自定义 msg 包&#xff08;diy_interface&#xff09;2.2.2 pubsub_cpp 收发自定义 msg2.2.3 pubsub_py 收发自定义 msg 2.3 自定义 msg 放在模块包里&#xff08;p…

逻辑思维1000题丨【Exercise 1】解析

目录 声明 解析 声明 解析网上是搜不到的&#xff0c;100%原创。本专栏只会讲解重难点题目&#xff0c;简单题目不做讲解。 解析 2.What is the missing number? 1 12 13 124 15 1236 17 1248 139 12510 111 1234612 113 12714 13515 &#xff1f; 观察每个数字的末尾分别是…

Redis高并发分布锁实战

Redis高并发分布锁实战 问题场景 场景一: 没有捕获异常 // 仅仅加锁 // 读取 stock15 Boolean ret stringRedisTemplate.opsForValue().setIfAbsent("lock_key", "1"); // jedis.setnx(k,v) // TODO 业务代码 stock-- stringRedisTemplate.delete(&quo…

HarmonyOS服务卡片开发指导(Stage模型)概述

服务卡片概述 服务卡片&#xff08;以下简称“卡片”&#xff09;是一种界面展示形式&#xff0c;可以将应用的重要信息或操作前置到卡片&#xff0c;以达到服务直达、减少体验层级的目的。卡片常用于嵌入到其他应用&#xff08;当前卡片使用方只支持系统应用&#xff0c;如桌…

Android Gradle 开发与应用 (一) : Gradle基础

1. Gradle是什么 Gradle是一个通用的构建工具&#xff0c;支持诸多主要的 IDE&#xff0c;包括 Android Studio、IntelliJ IDEA、Visual Studio 等 Gradle 的底层实现(核心引擎和框架)其实是用 Java 编写的开发者通常使用 Groovy 或 Kotlin 来编写构建脚本 1.1 那么为什么Gra…

你真的了解@Async吗?

你真的了解Async吗&#xff1f; 使用场景&#xff1a; 开发中会碰到一些耗时较长或者不需要立即得到执行结果的逻辑&#xff0c;比如消息推送、商品同步等都可以使用异步方法&#xff0c;这时我们可以用到Async。但是直接使用 Async 会有风险&#xff0c;当我们没有指定线程池…

速度提高100倍 - 扩展 RAG 应用程序,以实现数十亿个嵌入,并行计算余弦相似度

原文链接&#xff1a;100x Faster — Scaling Your RAG App for Billions of Embeddings 2024 年 2 月 15 日 RAG应用程序最大的问题之一是它们的计算检索时间。想象一下&#xff0c;你有一个向量数据库&#xff0c;包含一万亿条Embedding向量的记录。当您尝试将用户查询与一…

数字化转型导师坚鹏:政府数字化转型智慧城市类案例研究

政府数字化转型智慧城市类案例研究 课程背景&#xff1a; 很多地方政府存在以下问题&#xff1a; 不清楚政府数字化转型的智慧城市类成功案例 不清楚政府数字化转型的城市大脑类成功案例 不清楚政府数字化转型的综合实践类成功案例 课程特色&#xff1a; 针对性强 …

LDRA Testbed软件静态分析_软件质量度量

系列文章目录 LDRA Testbed软件静态分析_操作指南 LDRA Testbed软件静态分析_自动提取静态分析数据生成文档 LDRA Testbed软件静态分析_Jenkins持续集成_(1)自动进行静态分析的环境搭建 LDRA Testbed软件静态分析_Jenkins持续集成_(2)配置邮件自动发送静态分析结果 LDRA Testb…

LeetCode--代码详解 236. 二叉树的最近公共祖先

236. 二叉树的最近公共祖先 题目 给定一个二叉树, 找到该树中两个指定节点的最近公共祖先。 百度百科中最近公共祖先的定义为&#xff1a;“对于有根树 T 的两个节点 p、q&#xff0c;最近公共祖先表示为一个节点 x&#xff0c;满足 x 是 p、q 的祖先且 x 的深度尽可能大&am…

python 循环语句 while 循环

while循环 Python 编程中 while 语句用于循环执行程序&#xff0c;即在某条件下&#xff0c;循环执行某段程序&#xff0c;以处理需要重复处理的相同任务。其基本形式为&#xff1a; while 判断条件(condition)&#xff1a; 执行语句(statements)…… 执行语句可以是单个语句…