go websocket 服务 及 nginx 的配置

news/2024/11/14 1:02:16/文章来源:https://www.cnblogs.com/rx1105/p/18541768

go websocket 开启服务 ws, wss 服务

  • 5001 对应的是 ws, 5000 对应的是 wss
go func() {if err := r.Run(fmt.Sprintf(":%d", c.WsPort)); err != nil {global.Logger.Panic("启动失败 ws:", err)}
}()
if err := r.RunTLS(fmt.Sprintf(":%d", c.WssPort), "domain.crt", "privkey.key"); err != nil {global.Logger.Panic("启动失败 wss:", err)
}

Nginx 中 80,443 端口配置

1.

检查 Nginx 配置

确保您的 Nginx 配置针对 WebSocket 的设置是否正确。以下是一个基本的配置示例(包括SSL的配置):

nginx<button><svg><path></path></svg><span>Copy code</span><span></span></button>
server {listen 80;server_name task.vip;
location /ws {proxy_pass http://localhost:5001;proxy_http_version 1.1;  # 使用 HTTP/1.1,支持 WebSocketproxy_set_header Upgrade $http_upgrade;  # 确保 WebSocket 升级请求通过proxy_set_header Connection "upgrade";  # 把连接标记为升级proxy_set_header Host $host;  # 注意,如果没有,这里对应指向后端服务 localhost:5001,而不是取 $hostproxy_set_header X-Real-IP $remote_addr;  # 转发用户 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发代理 IPproxy_set_header X-Forwarded-Proto $scheme;  # 转发协议(http 或 https)
}

}

server {
listen 443 ssl;
server_name task.vip;

ssl_certificate /path/to/your/certificate.crt;  # 替换为您的证书路径
ssl_certificate_key /path/to/your/private.key;  # 替换为您的私钥路径location /ws {proxy_pass http://localhost:5000;  # 注意,这里应该用 https, 对应 go websocket 中的服务 wss 服务,因为对应的 http 对应的应该是 ws 5001proxy_http_version 1.1;  # 使用 HTTP/1.1proxy_set_header Upgrade $http_upgrade;  # 确保 WebSocket 升级请求通过proxy_set_header Connection "upgrade";  # 把连接标记为升级proxy_set_header Host $host;  # 注意,如果在私有网络中,这里对应指向后端服务 localhost:5000,而不是取 $hostproxy_set_header X-Real-IP $remote_addr;  # 转发用户 IPproxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发代理 IPproxy_set_header X-Forwarded-Proto $scheme;  # 转发协议(http 或 https)
}

}

2.

检查后端服务

确保位于 localhost:5000 上的 WebSocket 服务正在运行,并且可以处理来自 Nginx 的 WebSocket 请求。尝试直接使用 WebSocket 客户端连接到 ws://localhost:5000/ws 测试后端服务是否正常工作。

3.

SSL/TLS 到 WebSocket 的配置

确认您的 WebSocket 后端服务支持在 TLS(SSL)下运行。虽然您可以通过 http://localhost:5000 来处理 WebSocket,但您需要确保它至少也支持在 HTTPS 基础上进行的连接。

4.

跨域问题

如果您的 WebSocket 前端与后端分属不同的域,确保后端处理了跨域请求,特别是通过适当的 CORS 策略来允许来自 task.vip 的请求。

5.

查看 Nginx 错误日志

在 Nginx 错误日志中查找更详细的信息。错误日志通常位于 /var/log/nginx/error.log,查看是否有相关的错误消息,可以帮助定位问题的根源。

6.

检查浏览器控制台

查看浏览器的开发者控制台,确认是否有其他更详细的错误信息。例如,SSL 证书是否有效、握手是否被阻止、拒绝连接等。

7.

Nginx 版本

您的 Nginx 版本是 1.15.11,这个版本相对比较老,建议考虑升级 Nginx 至更新版本,以便获取到更多的功能和 bug 修复,尤其是对 WebSocket 的支持。

8.

示例调试

  • 在 Nginx 中将 location /ws 通配符替换为 location /ws/,确保路径一致性。
  • 将 proxy_set_header Connection "Upgrade"; 和 proxy_set_header Upgrade $http_upgrade; 放置在 location 内部以确保它们被正确解析。

完成前述检查和配置后,重启 Nginx 服务并再次测试连接以查看问题是否得到解决。使用以下命令重启 Nginx:

bash<button><svg><path></path></svg><span>Copy code</span><span></span></button>
sudo systemctl restart nginx

希望以上信息能帮助您解决问题!如果问题依然存在,请提供更多的上下文信息来进行更深入的分析。

连接 WS、WSS - 可直接用 postman 测试

  • ws://task.vip/ws
  • wss://task.vip/ws

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ex8.7

from scipy.integrate import odeint import numpy as np import pylab as plt import sympy as spdy = lambda y, x: -2*y+2*x**2+2*x #自变量在后面 xx = np.linspace(0,3,31) s = odeint(dy, 1, xx) print(x={}\n对应的数值解y={}.format(xx, s.flatten())) plt.plot(xx, s…

ex8.8

from scipy.integrate import odeint import numpy as np import pylab as plt yx = lambda y,x: [y[1], np.sqrt(1+y[1]**2)/5/(1-x)] x0 = np.arange(0, 1, 0.00001) y0 = odeint(yx, [0,0], x0) plt.rc(font, size=16) plt.plot(x0, y0[:,0]); plt.show()

4G模组软件指南 | 必读篇之模块信息(hmeta)

今天我讲解的这篇关于4G模组软件的模块信息属于必读篇,望珍惜!今天我讲解的这篇关于4G模组软件的模块信息属于必读篇,望珍惜! 1、模块信息概述 模块信息是每一个模块携带的信息,就像人的身份证一样,这些信息确定了模块的唯一性; 包含设备唯一id,硬件型号,模组的硬件版本号,…

ABP框架+SqlSugar

一:使用ABP框架的主要原因包括以下几点‌: (1)安装abp框架步骤 ‌快速开发‌:ABP框架提供了一系列的代码生成器和基于集成测试的自动化测试工具,可以大大缩短开发周期、提高开发效率‌ ‌模块化设计‌:ABP框架以模块为单位进行组织和拓展,将应用程序分割成一些彼此独立的…

4G模组AT指令 | MQTT应用指南!

今天,老师傅讲的是关于4G模组AT指令之MQTT应用,以4G模组Air780E为例:今天,老师傅讲的是关于4G模组AT指令之MQTT应用,以4G模组Air780E为例: 一、MQTT 协议简介 1.1 MQTT 概述 MQTT 是一种轻量级的消息传输协议,旨在在物联网(IoT)应用中实现设备间的可靠通信。它使用发布…

药企如何借助数字化手段实现客户分级管理?

随着医药行业竞争的加剧,药企对终端客户的精细化管理需求日益提升。如何在庞大的客户群体中,准确划分并针对不同客户进行个性化营销,已成为药企数字化转型的关键目标之一。本文将探讨如何借助数字化手段实现客户分级管理,助力药企精细化运营和市场拓展。 1. 客户分级管理的…

让CMYK印刷颜色变干净的方法

CMYK颜色灰怎么办?一个操作让颜色变干净! 在 CMYK 色彩模式中,C(青色)、M(洋红)、Y(黄色)、K(黑色)的组合如果出现问题,就容易导致颜色发灰。其中一个主要原因是黑色(K)的过度使用或者不恰当使用。当 K 值过高时,容易使颜色暗淡发灰。另外,CMY 三色的平衡失调,…

习题7.1

import numpy as np import scipy.interpolate as spi import scipy.integrate as spi_integratedef g(x):return ((3*x**2 + 4*x + 6) * np.sin(x)) / (x**2 + 8*x + 6)# 生成x值 x_values = np.linspace(0, 10, 1000)# 计算对应的y值 y_values = g(x_values)# 创建三次样条插…

脑机接口、嵌入式 AI 、工业级 MR、空间视频和下一代 XR 浏览器丨RTE2024 空间计算和新硬件专场回顾

这一轮硬件创新由 AI 引爆,或许最大受益者仍是 AI,因为只有硬件才能为 AI 直接获取最真实世界的数据。在人工智能与硬件融合的新时代,实时互动技术正迎来前所未有的创新浪潮。从嵌入式系统到混合现实,从空间视频到脑机接口,这些前沿领域正以惊人的速度推进,为未来的人机交…

GitLab 如何跨版本升级?

本分分享 GitLab 跨版本升级的一些注意事项。 众所周知,GitLab 的升级必须要严格遵循升级路径,否则就会出现问题,导致升级失败。因此,在 GitLab 升级之前需要做好两件事情:当前版本的确认 升级路径的确认极狐GitLab 推出 GitLab 专业升级服务,专业人员为 GitLab升级保驾护…

Codeforces Round 898 (Div. 4)E - Building an Aquarium

E. Building an Aquarium 题目 有一块由 \(n\) 根柱子组成的珊瑚,其中 \(i\) 根柱子高 \(a_i\) 个单位。之后,在珊瑚周围建造一个水族箱,具体如下:选择一个整数 \(h \geq 1\) --水箱的高度。在水箱两侧建造高度为 \(h\) 的墙壁。 然后,在水箱中注满水,使每一列的高度都是…