nginx配置https及wss

ops/2024/10/22 10:53:28/

环境说明

服务器的是centos7

nginx版本nginx/1.20.1

springboot2.7.12

nginx安装教程点击这里

wss_6">微信小程序wss配置

如果您的业务是开发微信小程序, 请先进行如下配置。

https://img-blog.csdnimg.cn/img_convert/633ab385bce967d1e2936d6d0dbba104.png" alt="WX20240422-210531@2x.png" />

websocket_11">boot集成websocket

  • maven
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId>
</dependency>
  • config配置文件
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.socket.server.standard.ServerEndpointExporter;
import org.springframework.web.socket.server.standard.ServletServerContainerFactoryBean;/*** @author mark* @description websocket配置* @date 2024-04-21*/
@Configuration
public class WebSocketConfig {/*** 自动注册使用了@ServerEndpoint注解声明的Websocket endpoint** @return*/@Beanpublic ServerEndpointExporter serverEndpointExporter() {return new ServerEndpointExporter();}/*** 通信文本消息和二进制缓存区大小* 避免对接 第三方 报文过大时,Websocket 1009 错误* @return*/@Beanpublic ServletServerContainerFactoryBean createWebSocketContainer() {ServletServerContainerFactoryBean container = new ServletServerContainerFactoryBean();// 在此处设置bufferSizecontainer.setMaxTextMessageBufferSize(10240000);container.setMaxBinaryMessageBufferSize(10240000);container.setMaxSessionIdleTimeout(15 * 60000L);return container;}
}
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;import javax.websocket.*;
import javax.websocket.server.ServerEndpoint;
import java.io.IOException;
import java.util.concurrent.CopyOnWriteArraySet;
import java.util.concurrent.atomic.AtomicInteger;/*** @author mark* ws://127.0.0.1:8768/jeecg-activiti-gateway/ws/playBack* wss://doc.zengzhang.vip:8768* @description 统计在线人数* @date 2024-04-21*/
@Slf4j
@Component
@ServerEndpoint(value = "/ws/playBack")
public class WebSocketServerPlayBack {/*** 记录链接在线数量**/private static final AtomicInteger onlineCount = new AtomicInteger(0);/*** 存放每个客户端对应的 WebSocketServer 对象**/private static CopyOnWriteArraySet<WebSocketServerPlayBack> webSocketSet = new CopyOnWriteArraySet<>();/*** 与某个客户端的连接会话,需要通过它来给客户端发送数据**/private Session session;/*** 心跳报文**/private static final String HEARTBEAT_PACKETS = "The heartbeat packets";/*** 连接建立成功调用的方法*/@OnOpenpublic void onOpen(Session session) {this.session = session;// 加入set中webSocketSet.add(this);// 在线数加1onlineCount.getAndIncrement();}/*** 连接关闭调用的方法*/@OnClosepublic void onClose() {// 从set中删除webSocketSet.remove(this);// 在线数减1onlineCount.getAndDecrement();}/*** 发生错误时调用*/@OnErrorpublic void onError(Session session, Throwable error) {log.error("[历史数据回放] - WS 异常断开", session, error);}/*** 收到客户端消息后调用的方法** @param message 客户端发送过来的消息*/@OnMessagepublic void onMessage(String message, Session session) {log.info("--000--" + message);if (HEARTBEAT_PACKETS.equals(message)) {log.debug("[消息订阅] - 心跳.");return;}// TODO 接收前端入参后的业务处理}/*** 群发自定义消息*/public static void sendInfo(String message) {for (WebSocketServerPlayBack item : webSocketSet) {try {item.sendMessage(message);} catch (IOException e) {log.error("[NVR 数据对接] - 数据推送异常, 数据: [{}].", message, e);continue;}}}/*** 指定会话推送** @param message*/public static void sendInfo(Session session, String message) {for (WebSocketServerPlayBack item : webSocketSet) {try {if (null != session && item.session.equals(session)) {item.sendMessage(message);}} catch (IOException e) {log.error("[数据对接] - 数据推送异常, 数据: [{}].", message, e);continue;}}}/*** 向链接推送消息** @param message* @throws IOException*/public void sendMessage(String message) throws IOException {log.info("sendMessage:{}", message);this.session.getBasicRemote().sendText(message);}}
  • SwaggerConfig权限放开
// 授权不需要登录权限的URL
.antMatchers("/swagger*/**","/explain/**","/file/**",//这个是webscoket所需的配置"/ws/**","/push/**","/v2/api-docs","/webjars*//**").permitAll()

nginx_222">nginx配置

亲测可用,直接贴代码,大家可以直接拿来使用。

注意啦!!!你的域名需要在管理后台下载免费或付费的SSL证书。

upstream doc {server 127.0.0.1:8768 weight=1;
}
server {listen 443 ssl;server_name xxx.comlisten 80;ssl on;# 将下载的ssl证书配置在这里ssl_certificate  /etc/nginx/conf.d/ssl/doc/doc.zengzhang.vip_bundle.crt;ssl_certificate_key /etc/nginx/conf.d/ssl/doc/doc.zengzhang.vip.key;ssl_session_cache shared:SSL:1m;ssl_session_timeout 5m;ssl_ciphers HIGH:!aNULL:!MD5;gzip on;gzip_min_length 3k;gzip_comp_level 9;gzip_types text/plain application/javascript application/x-javascript text/css application/xml text/javascript application/x-httpd-php image/jpeg image/gif image/png;gzip_vary on;gzip_disable "MSIE [1-6]\.";root /usr/share/nginx/html;location / {proxy_pass http://doc;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection keep-alive;proxy_set_header Host $host;proxy_cache_bypass $http_upgrade;proxy_set_header Connection "Upgrade";proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

配置好后,直接重启nginx

命令是:systemctl restart nginx

接下来,敲黑版,重点来啦!!!

没有配置wss的情况下,我们是这样与服务器端建立连接。

ws://xxx.com:8768/jeecg-activiti-gateway/ws/playBack

配置了wss情况下, 我们建立连接的方式是这样的。

wss://xxx.com:443/jeecg-activiti-gateway/ws/playBack

客户端 由之前的请求地址 ws://www.xxx.com:8768 改为了 wss://www.xxxx.com:443

这个点,需要特别注意啦!!! 本人花费4个小时, 终于找到原因。

如果对您有帮助, 多多点赞啦啦啦…

也可以支持一下作者的网站哦, 点击下方链接。
JeecgFlow


http://www.ppmy.cn/ops/12484.html

相关文章

LeetCode90:子集②

题目描述 给你一个整数数组 nums &#xff0c;其中可能包含重复元素&#xff0c;请你返回该数组所有可能的 子集 &#xff08;幂集&#xff09;。 解集 不能 包含重复的子集。返回的解集中&#xff0c;子集可以按 任意顺序 排列。 解题思想 要考虑去重的操作 代码 class Sol…

Day10 React———— 第十天

useReducer useReducer 是 React Hooks 中的一个函数&#xff0c;用于管理组件的状态。它类似于 useState&#xff0c;但提供了更复杂的状态逻辑处理能力。 接受一个 reducer 函数和初始状态作为参数&#xff0c;并返回当前状态和 dispatch 函数。 使用 useReducer 的基本流程…

【案例】--自定义DSL查询

目录 一、前言二、如何设计规则1、<filedName>{关键词}2、<filedName>{规则}3、AND、OR、NOT4、<accure>表达式三、代码实现DSL1、示例说明2、核心代码实现一、前言 自定义ES的DSL查询(dynamic ES Query Language)【DEQL】是针对非结构化信息加工、提取需求…

Hdu1350 Taxi Cab Scheme 【最小路径覆盖】

Taxi Cab Scheme 题意 有一张边长不超过 200 200 200 的网格图&#xff0c;有若干个乘客&#xff0c; 乘客 i i i 的需求是&#xff1a; h h : m m , ( a , b ) , ( c , d ) hh:mm, (a,b) , (c, d) hh:mm,(a,b),(c,d)&#xff0c;意为他需要在 h h 时 m m 分 hh时mm分 hh时…

【WebLogic】Oracle发布2024年第二季度中间件安全公告

Oracle于美国时间2024年4月16日发布了 WebLogic 中间件2024年第二季度的安全公告&#xff0c;涉及漏洞共计 10 个&#xff0c;涉及示例程序的高危漏洞 1 个&#xff0c;中危漏洞中有3个涉及到核心组件&#xff08;Core&#xff09;。 此外&#xff0c;Oracle JDK1.8 的小版本号…

vue中 key 的原理

Vue中&#xff0c;key是用于帮助Vue识别VNode的一种特殊属性&#xff0c; 当Vue在更新DOM时&#xff0c;它会尽可能地复用已经存在的元素而不是重新创建&#xff0c; key的作用&#xff0c;就是&#xff0c;帮助Vue识别每个VNode的唯一性&#xff0c; 从而在进行DOM更新时&a…

通过Redis实现一个异步请求-响应程序

在分布式系统中,经常需要不同的服务或组件之间进行通信和协作。传统的同步请求-响应模式虽然简单直观,但可能会导致阻塞和性能问题。为了解决这个问题,我们开发了一个基于 Redis 的异步请求-响应程序,实现了请求和响应的解耦,提高了系统的并发性和响应能力。 程序概述 该程序…

SCA-CNN-LSTM多输入回归预测|正余弦优化算法-卷积-长短期神经网络|Matlab

目录 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 亮点与优势&#xff1a; 二、实际运行效果&#xff1a; 三、算法介绍&#xff1a; 四、完整程序下载&#xff1a; 一、程序及算法内容介绍&#xff1a; 基本内容&#xff1a; 本代码基于Matlab平台编译&am…