解决websocket在部署到服务器https下无法使用的问题

news2024/11/23 15:54:50

目录

一、问题

1.1 问题描述

1.2 问题详细描述

二、解决

2.1 https下的链接类型

2.2 修改Nginx的配置

一、问题

1.1 问题描述

一个小项目中使用到了websocket,这个websocket在本地完全是完全正常运行的,不管是前后台的信息通讯 还是 异常报错接收无任何异常,但当把后台代码部署到阿里云服务器后,websocket就再也链接不上了;

(PS: 博主的websocket是应用在uni-app中的,因此使用的是uni-app自带的websocket,这个本质上没有任何区别~)

1.2 问题详细描述

uni-app端的简易websocket代码,大致如下;

// 建立websocket
uni.connectSocket({
  url: Setting.wsUrl
});

// 打开
uni.onSocketOpen(res => {
  console.log('--- 数据通信已打开 ---');
});

uni.onSocketError((res) => {
  console.log('--- 数据通信连接失败,请检查 ---');
});

uni.onSocketMessage((res) => {
  // console.log('收到服务器内容:' + res.data);
  this.resultData(JSON.parse(res.data))
});

当项目启动打开websocket页面,与后台链接成功后前台会打印出:--- 数据通信已打开 ---,

运行后在本地正确打印了结果

但是 当后台文件打包部署到阿里云服务器 后,websocket链接异常,无法正确打印结果;

二、解决

我在这里一共遇到了 两个错误,第一个分别是 https下的链接类型 以及 nginx配置异常 这两个问题,这两个问题解决后,websocket即可正常使用了;

2.1 https下的链接类型

这个问题主要在于链接中的类型写错了,需要把 ws 改写成 wss ,如本地的时候由于使用的是http类型,因此websocket的链接写成了

ws://localhost:5002

但当部署到服务器之后,由于服务器是https的格式,因此ws显然不再合适了,需要改成 wss,即

wss://www.xxxxxx.com/xxx/

放到具体uni-app代码中就是这样

// 建立websocket
uni.connectSocket({
  url: "ws://localhost:5002"
});

// 需要改成 wss 开头的
uni.connectSocket({
  url: "wss://www.xxxx.com/xxxx"
});

这样,就将兼容https下的websocket了;

2.2 修改Nginx的配置

除了改wss外,nginx同样要修改,默认情况下的Nginx是不支持的,因此需要手动去开通这个功能;

首先,找到Nginx的配置文件,然后在配置文件中为需要开通websocket的后台加上这几条语句

proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Real-IP $remote_addr;  

以我这边为例,改之前是这样的

server {
	listen 443 ssl;
	server_name www.xxxx.com;
	# access_log  /var/log/nginx/access.log  main;
	# error_log  /var/log/nginx/error.log;

	ssl_certificate      #填写解压的pem文件
	ssl_certificate_key  #填写解压的key文件

	# ssl on;
	ssl_session_cache    shared:SSL:10m;
	ssl_session_timeout  50m;

	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	location / {
		root 前台文件;
	}
	location /api/ {
		proxy_pass 后台接口地址;
	}
	location /api2/ {
		proxy_pass 后台接口地址;
    }
}

改完之后如下

server {
	listen 443 ssl;
	server_name www.xxxx.com;
	# access_log  /var/log/nginx/access.log  main;
	# error_log  /var/log/nginx/error.log;

	ssl_certificate      #填写解压的pem文件
	ssl_certificate_key  #填写解压的key文件

	# ssl on;
	ssl_session_cache    shared:SSL:10m;
	ssl_session_timeout  50m;

	ssl_ciphers  HIGH:!aNULL:!MD5;
	ssl_prefer_server_ciphers  on;

	location / {
		root 前台文件;
	}
	location /api/ {
		proxy_pass 后台接口地址;
	}
	location /api2/ {
		proxy_pass 后台接口地址;
		proxy_http_version 1.1;
		proxy_set_header Upgrade $http_upgrade;
		proxy_set_header Connection "upgrade";
		proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
		proxy_set_header X-Real-IP $remote_addr; 
    }
}

加上之后 重启Nginx,websocket即可正常使用了,解决问题;

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

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

相关文章

JavaScript教程(高级)

面向对象编程介绍 两大编程思想 (1)、 面向过程编程: (缩写 POP)( Process-oriented programming)面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一步一步实现&am…

【PowerQuery】M语言的使用产品和使用场景

当然PowerQuery的M语言应用场景不只是引用在PowerBI和Excel中,它具有广泛的应用场景。目前我们可以在以下产品的使用场景中应用到M语言。 Excel PowerQuery应用Excel通过M语言可以实现整体数据的清洗和重构。  PowerBI 的PowerQuery应用 PowerBI也是通过M语言来实现数据…

VSCODE 插件推荐

文章目录 项目管理Project Manager markdownmarkdown-pdfPaste ImageMarkdown Preview Enhanced 笔记Notes 思维导图vscode-mindmap 开发Visual Studio IntelliCode GitHub Repositories 项目管理 Project Manager 以下是项目管理器提供的一些功能: 将任何文件夹…

JS中this的指向

JS中this的指向 本文目录 JS中this的指向全局上下文(Global Context)函数上下文(Function Context)普通函数调用作为对象的方法调用构造函数调用箭头函数回调函数 事件处理器上下文(Event Handler Context)…

find_package深度解析及实例应用

1. 检索模式 1.1 module模式 在这个模式下会查找一个名为find.cmake的文件,首先去CMAKE_MODULE_PATH指定的路径下去查找,然后去cmake安装提供的查找模块中查找(安装cmake时生成的一些cmake文件)。找到之后会检查版本,…

大模型全情投入,低代码也越来越清晰

众所周知,不少互联网企业在大模型领域全情投入。那么在这阵阵浪潮中,我们可以观察到什么样的“众生相”? 今年3月以来,国内已有超过20家企业入局大模型赛道。从百度“文心一言”、阿里“通义千问”的发布,华为“盘古”…

解决Kali的Python版本切换问题以及pip2安装问题

问题背景 需要使用Python2版本运行脚本,但是Kali系统自从2021后Python2,3共存 解决方案 (1)打开终端输入以下命令,但是需要有root权限 update-alternatives --install /usr/bin/python python /usr/bin/python2 100…

k8s介绍

目录 1:k8s概念 2:为什么引入k8s和k8s特性 2.1 为什么要引入k8s: 2.2 k8s特性 3 K8S架构 1:k8s概念 k8s官方网站:Kubernetes Kubernetes 是一个可移植、可扩展的开源平台,用于管理容器化的工作负载和…

数据库基础——5.运算符

这篇文章我们来讲一下SQL语句中的运算符操作。 说点题外话:SQL本质上也是一种计算机语言,和C,java一样的,只不过SQL是用来操作数据库的。在C,java中也有运算符,这两种语言中的运算符和数学中的运算符差距不…

【形形色色的卷积】差分卷积

文章目录 0. 前言1. 中心差分卷积2. 像素差分卷积3. 参考 0. 前言 普通卷积不能显式地提取图像的梯度信息,因此不能较好地描述细粒度的纹理信息,在人脸活体检测、边缘检测等对细粒度纹理信息敏感的任务中难以取得理想的结果。针对上述问题,O…

基于STM32的定时器--定时中断(HAL库)

基于STM32的定时器--定时中断(HAL库) 介绍引言定时器介绍 实例项目介绍准备设计流程 介绍 引言 本文旨在介绍如何使用STM32CubeMX配置KEIL 5开发一个每10us定时器中断触发一次的项目。帮助初学者入门STM32的定时器使用。 定时器介绍 定时器是STM32微…

2.信息安全之常用黑客攻击手段

1.自己也可以建CA系统 winserver2003 https 准备2台机器xpsp3(证书,Web),在同一网段,https通讯 –>网络内部网络(同一网段) (iso镜像才有网络和服务…这个镜像已 经安装好了(不能乱删)) sp1 2 3 的网络 改 tcp/ip 属性 ip地址112.26.0.1 和子网掩码255.0.0.0(与ip地址对应,…

opencv_c++学习(二十七)

一、单目相机模型 上图为针孔相机成像原理,蓝色坐标中的O即为镜头光心。成像原理与小孔成像相同。 单目相机映射关系如下: 将上式进行变换,就可以从三位空间映射到2维平面的公式。 相机的畸变公式如下: 二、模型投影函数 vo…

数据结构基础内容-----第五章 串

文章目录 串串的比较串的抽象数据类型串的顺序存储结构朴素的额模式匹配算法kmp模式匹配算法 串 在计算机编程中,串(String)是指由零个或多个字符组成的有限序列。它是一种基本的数据类型,在许多编程语言中都得到了支持和广泛应用…

STM32之SPI和W25Q128

目录 SPI 介绍 SPI 物理架构 SPI 工作原理 SPI 工作模式 W25Q128 介绍 W25Q128 存储架构 W25Q128 常用指令 W25Q128 状态寄存器 W25Q128 常见操作流程 实验:使用 SPI 通讯读写 W25Q128 模块 硬件接线 cubeMX配置 w25q128_write_nocheck流程图 代码&a…

如何在华为OD机试中获得满分?Java实现【最长回文子串】一文详解!

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: Java华为OD机试真题(2022&2023) 文章目录 1. 题目描述2. 输入描述3. 输出描述…

网络原理(八):HTTPS

目录 HTTP 基本工作流程 利用对称密钥进行加密 利用非对称密钥进行加密 引入了第三方权威机构加密 之前在http 协议中说到:我们现在很少有网站直接使用HTTP 协议的,而是使用HTTPS ,至于什么原因,本篇会介绍清楚。 HTTPS 其实…

C++11 -- lambda表达式

文章目录 lamaba表达式的引入lambda表达式语法lamabda达式各部分说明捕获列表说明 lamaba表达式底层原理探索 lamaba表达式的引入 在C11之前,如果我们想对自定义类型Goods排序,可以根据姓名,价格,学号按照从大到小或者从小到大的方式排序,可是,这样我们要写额外写6个相关的仿函…

以太坊学习三: Merkle树和验证

Merkle tree简介 Merkle树又称为哈希树,是一种二叉树,由一个根节点、若干中间节点和一组叶节点组成。最底层的叶节点存储数据,在它之上的一层节点为它们对应的Hash值,中间节点是它下面两个子节点的Hash值,根节点是最后…

DAY 66 数据库缓存服务——NoSQL之Redis配置与优化

缓存概念 缓存是为了调节速度不一致的两个或多个不同的物质的速度,在中间对速度较慢的一方起到加速作用,比如CPU的一级、二级缓存是保存了CPU最近经常访问的数据,内存是保存CPU经常访问硬盘的数据,而且硬盘也有大小不一的缓存&am…