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