freeswitch http https ws wss nginx domain default port config

现代H5浏览器产业链越来越丰富,http+websocket+webrtc+sip组合已经是一种非常成熟的web原生音视频通讯解决方案

FreeSWITCH是一个开源的电话软交换平台,早在SIP年代就非常有名,自从支持WebSocket传输sip信令后与Web结合玩法多了许多

WebRTC提供了音视频通讯的核心技术,包括音视频的采集、编解码、网络传输、显示等功能,并且还支持跨平台,但就是没有信令协议部分

Chrome、Firefox等浏览器为了从保护用户隐私绝对安全角度考虑,纷纷提高了Web原生应用访问摄像头、麦克风的门槛:如不是用https、wss安全协议则会有各种警告及确认甚至直接拒绝

WS、WSS其实就是HTTP、HTTPS的WebSocket协议名称,其使用方式及默认端口都完全一致

综上所述,如果都用同一个域名地址承载web sip相关服务方便用户使用,就需要在nginx上做一些优雅的配置

其对应freeswitch相关端口配置片断如下

注:
sip和rtp端口不经nginx直连,但需要防火墙做相应的白名单
ws5066端口和wss7443端口间接通过nginx的http端口和https端口反向代理提供服务
nginx默认的http80端口和https443端口又用来提供webrtc前端相关资源访问

nginx log.io websocket config

将nginx部署到log.io前端后发现功能虽然正常,但控制台有错误记录

接着就是刷屏式的如下请求了

猜测肯定遇到降级处理了,找到了其依赖的socket.io源码确认果然如此

那问题基本归根与nginx对于websocket这种新协议的代理问题,简单优化配置如下

可见不用新开端口服务,直接在现有的http端口通道上进行改造即可
同时附上websocket握手协议的相关记录以方便日后进行深入研究

 

nginx统一多个server location favicon.ico

icon文件存放位置
/var/www/favicon/favicon.ico

/etc/nginx/conf.d/favicon.cnf

或者忽略错误与访问日志

/etc/nginx/conf.d/domain.conf等相关server段里面include统一管理