首页 > 系统相关 >go websocket 服务 及 应用 nginx 的配置

go websocket 服务 及 应用 nginx 的配置

时间:2024-11-12 14:30:23浏览次数:1  
标签:set websocket Nginx header nginx ws proxy go WebSocket

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,支持 WebSocket
    proxy_set_header Upgrade $http_upgrade;  # 确保 WebSocket 升级请求通过
    proxy_set_header Connection "upgrade";  # 把连接标记为升级
    proxy_set_header Host $host;  # 注意,如果没有,这里对应指向后端服务 localhost:5001,而不是取 $host
    proxy_set_header X-Real-IP $remote_addr;  # 转发用户 IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发代理 IP
    proxy_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 5001
    proxy_http_version 1.1;  # 使用 HTTP/1.1
    proxy_set_header Upgrade $http_upgrade;  # 确保 WebSocket 升级请求通过
    proxy_set_header Connection "upgrade";  # 把连接标记为升级
    proxy_set_header Host $host;  # 注意,如果在私有网络中,这里对应指向后端服务 localhost:5000,而不是取 $host
    proxy_set_header X-Real-IP $remote_addr;  # 转发用户 IP
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;  # 转发代理 IP
    proxy_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

标签:set,websocket,Nginx,header,nginx,ws,proxy,go,WebSocket
From: https://www.cnblogs.com/rx1105/p/18541768

相关文章

  • 在Linux中使用Nginx和Docker进行项目部署
    前言随着云计算和微服务架构的发展,容器化技术如Docker变得越来越重要。本篇文章将向大家介绍如何在Linux操作系统中使用Nginx作为Web服务器,并结合Docker容器化技术来部署一个简单的Web应用。通过本文,你将学会基本的Linux命令、Nginx的安装与配置,以及如何使用Docker进行应用部......
  • golang 实现比特币内核:公钥的 SEC 编码格式详解
    比特币作为区块链的一个应用,它建立在分布式系统之上,‘节点’遍布全球。为了使所有节点协同工作并作为一个整体系统运行,需要保持所有节点同步在相同的状态中,也就是说节点之间需要频繁通信,并且相互交换大量数据消息。这要求在网络上传输的消息或数据要使用某种格式编码,以确保......
  • 字节豆包发布新模型,AI 一句话 P 图;Google 正式推出 Vids,简单提示即可生成视频演示丨 R
       开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑......
  • 《Django 5 By Example》阅读笔记:p17-p53
    《Django5ByExample》学习第2天,p17-p53总结,总计37页。一、技术总结1.数据库迁移pythonmanage.pymakemigrationsblogpythonmanage.pysqlmigrateblog0001pythonmanage.pymigrate2.ORMDjango自带ORM。3.view(1)定义p42,ADjangoviewisjustaPythonfuncti......
  • 介绍Go中的for select case和chan 和goroutine
    好的,让我们详细分析您提供的代码片段:for{select{casemsg:=<-sensorChan://处理消息的代码}}1.整体结构概述这段代码使用了Go语言的并发控制结构,结合无限循环(for)、选择语句(select)、以及case分支来处理从sensorChan通道接收......
  • Cargo deny安装指路
    本博客所有文章除特别声明外,均采用CCBY-NC-SA4.0许可协议。转载请注明来自唯你简介cargodeny是一个Rust工具,用于检查项目依赖项的许可证、安全性和其他合规性问题。在RustCI(持续集成)中,cargodeny扮演着重要角色:许可证检查:确保项目使用的所有依赖项的许可证都符合......
  • 第四届算法、微芯片与网络应用国际会议(AMNA 2025) 2025 4th International Conference
    重要信息官网:https://ais.cn/u/vEbMBz......
  • comp9021 olygons Python
    Assignment2,Trimester3,2024Generalmatter1.1.Aims.Thepurposeoftheassignmentisto:designandimplementaninterfacebasedonthedesiredbehaviourofanapplicationprogram;practicetheuseofPythonsyntax;developproblemsolvingsk......
  • 【Nginx学习】深入 Nginx:4大步骤揭秘 Nginx 请求的多阶段异步处理
    ......
  • go实现AES加解密
    go实现是和之前我python和jsAES加解密的方式一样,可以相互解密。文件结构  encryption.gopackageencryptionimport("bytes""crypto/aes""crypto/cipher""crypto/sha256""encoding/base64""encoding/hex......