织梦网站描述,旅游在线网站开发,新手怎么开传媒公司,贴吧网站怎么做简介
本文记录一次海康视频代理websocket 在https业务系统环境下调用海康服务ws协议的问题。
问题描述
起初前端组件展示视频时#xff0c;业务系统使用的环境是https#xff0c;此时海康服务调用时#xff0c;使用的是ws协议#xff0c;最后前端控制台报错#xff1a;…简介
本文记录一次海康视频代理websocket 在https业务系统环境下调用海康服务ws协议的问题。
问题描述
起初前端组件展示视频时业务系统使用的环境是https此时海康服务调用时使用的是ws协议最后前端控制台报错
Failed to construct WebSocket:An insecure WebSocket connection may not be initiated from a page loaded over HTTPS.明显是https协议的安全控制需要通过nginx进行代理通过观察发现海康插件会调用类似下面这样一段ws服务地址
ws://IP:PORT/media?version1.0cipherSuites0sessionID先让让前端将ws修改为wss协议然后由后台nginx进行代理这里由于是海康的内部代码行为因此nginx只能对media关键字捕获从而进行代理如下是代理节 upstream haikangstream {server ip:port; # 此处对应原海康ws请求地址}server {....location /media {proxy_pass http://haikangstream;proxy_http_version 1.1;proxy_set_header Upgrade $http_upgrade;proxy_set_header Connection upgrade;}
}如此配置后按理说应该没问题不过前端调用过程中发现有时候某些视频能正常播放但极大概率由视频播放不正常失败的视频请求时nginx报错
2024/07/31 14:01:35 [error] 445170#0: *298 recv() failed (104: Connection reset by peer) while reading
response header from upstream, client: 192.168.20.165, server: localhost:18000,
request: GET /media?version1.0cipherSuites0sessionIDproxywss: HTTP/1.1,
upstream: http://x.x.x.x:p/media?version1.0cipherSuites0sessionIDproxywss:,host: 192.168.20.x:xx000其中X是敏感屏蔽若影响观感还请见谅。 仔细观察发现代理后的低值http://x.x.x.x:p/media?version1.0cipherSuites0sessionIDproxywss:最后的传参proxy不太正常对比原请求ws://IP:PORT/media?version1.0cipherSuites0sessionID尝试让前端在海康插件js中找到此处代码将proxy拼接参数逻辑去除即不传递此参数重启前端视频播放正常。
总结
处理该问题几乎花了一天的时间但是感觉都不是技术上的问题不知道海康api有什么考虑但还是站在无知者的角度建议遇到这个问题之后应该采取的方案
建议海康组件此处应考虑对wss协议的兼容。修改前端js代码处对proxy拼接逻辑同时nginx对media请求进行代理。