RTSPtoWeb配置HTTPS及解决生产环境混合内容问题的技术咨询
RTSPtoWeb配置HTTPS及解决生产环境混合内容问题的技术咨询
我之前刚好碰到过类似的场景,给你分享几个可行的解决方案,一步步来:
一、给RTSPtoWeb配置生产环境SSL证书(直接解决HTTPS访问问题)
你看到的config.json里的几个HTTPS参数其实很好理解,我给你拆解下:
"https": true:这个必须设为true,开启RTSPtoWeb的HTTPS服务"https_auto_tls": false:如果你已经有生产服务器的SSL证书,就保持false,这个开关是用来自动申请Let's Encrypt证书的,咱们用现成的不用开"https_cert"和"https_key":这里一定要填证书和私钥的绝对路径,比如你的证书存在/etc/ssl/certs/your-production-domain.crt,私钥在/etc/ssl/private/your-production-domain.key,就把这两个路径填进去,别用相对路径,不然RTSPtoWeb启动时找不到文件,就会报SSL协议错误
配置完之后重启RTSPtoWeb服务,再用https://你的服务器域名访问,应该就能正常加载了。
二、临时绕过Chrome混合内容检测(仅测试用,别放生产)
如果只是想快速验证功能,不想折腾证书,可以临时给Chrome加启动参数关闭混合内容限制:
- 右键Chrome快捷方式,打开「属性」
- 在「目标」栏的末尾(注意留个空格)加上
--allow-running-insecure-content - 重启Chrome后就能加载HTTP的RTSP流了,但这个方法是全局关闭安全检测,非常不安全,绝对不能给生产环境的用户用
三、用Apache反向代理(推荐生产环境的最优解)
既然你们生产环境已经用了Apache,这是最稳妥的方案,不用改RTSPtoWeb的HTTPS配置,就能让前端用HTTPS访问RTSP流:
- 打开Apache的生产域名虚拟主机配置文件,添加反向代理规则:
# 假设RTSPtoWeb运行在本地8080端口,你可以改成实际端口 <Location /rtsp-stream> ProxyPass http://localhost:8080/ ProxyPassReverse http://localhost:8080/ # WebRTC用到WebSocket,必须加下面两行支持 ProxyPass ws://localhost:8080/ ProxyPassReverse ws://localhost:8080/ </Location>
- 先开启Apache需要的模块:
sudo a2enmod proxy proxy_http proxy_wstunnel
- 重启Apache服务:
sudo systemctl restart apache2
之后前端页面里就可以用https://你的生产域名/rtsp-stream来访问RTSPtoWeb的流了,所有请求都是HTTPS,完美解决混合内容问题。
备注:内容来源于stack exchange,提问作者Morten Hansen
相关产品推荐
相关产品推荐

