【FreeSwitch开发实践】freeswitch ngnix wss反向代理及jssip修改(wss连不上问题解决)


前言

首先freeswitch支持UDP、TCP、WS(websocket)、WSS方式进行注册,而反向代理是指通过nginx配置,通过WSS的方式连接WS,这样使得freeswitch连接对外是加密的;当然freeswitch本身是支持WSS的, 用ngnix一般除了反向代理,更多的是作负载均衡,这里只介绍反向代理的部分。


一、准备工作

首先要把freeswitch配置好,5066端口是通的;另外准备测试工具,这里用的是jssip3.0.3; 再就是安装好ngnix。

  1. freeswitch 1.10.7 端口5066端口
  2. jssip3.0.3
  3. ngnix 1.22.0
  4. centos 7.6

二、ngnix配置

ngnix配置包括部分, 证书配置和反向代理配置。

证书配置

listen       443 ssl;
#server_name  localhost;
server_name freeswitch123.test.com.cn;
ssl_certificate cert/test.com.cn.crt;
ssl_certificate_key cert/test.com.cn.key;
ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;

反向代理配置

map $http_upgrade $connection_upgrade {
    default upgrade;
    '' close;
}
upstream 95f5024653ff52061359b6086677cf24 {
	server 10.0.8.23:5066  weight=10 max_fails=2 fail_timeout=6s;
}
location /{
	proxy_http_version 1.1;
	proxy_set_header Upgrade $http_upgrade;
	proxy_set_header Connection $connection_upgrade;
	proxy_read_timeout 86400s;
	proxy_pass http://95f5024653ff52061359b6086677cf24;
}

完整配置


user  root;
worker_processes  1;

#error_log  logs/error.log;
#error_log  logs/error.log  notice;
#error_log  logs/error.log  info;

#pid        logs/nginx.pid;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    #log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
    #                  '$status $body_bytes_sent "$http_referer" '
    #                  '"$http_user_agent" "$http_x_forwarded_for"';

    #access_log  logs/access.log  main;

    sendfile        on;
    #tcp_nopush     on;

    keepalive_timeout  65;

    #gzip  on;
    upstream 95f5024653ff52061359b6086677cf24 {
    	server 10.0.8.23:5066  weight=10 max_fails=2 fail_timeout=6s;
    }

	log_format  access  '$remote_addr - $remote_user [$time_local] "$request" '
             '$status $body_bytes_sent "$http_referer" '
             '"$http_user_agent" $http_x_forwarded_for "$upstream_addr" "$upstream_response_time" $request_time $content_length';

	map $http_upgrade $connection_upgrade {
        default upgrade;
        '' close;
    }
    server {
        listen       80;
        listen       443 ssl;
        #server_name  localhost;
		server_name freeswitch123.test.com.cn;
		ssl_certificate cert/test.com.cn.crt;
		ssl_certificate_key cert/test.com.cn.key;
		ssl_ciphers "EECDH+AESGCM:EDH+AESGCM:ECDHE-RSA-AES128-GCM-SHA256:AES256+EECDH:DHE-RSA-AES128-GCM-SHA256:AES256+EDH:ECDHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-RSA-AES128-SHA256:ECDHE-RSA-AES256-SHA:ECDHE-RSA-AES128-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES128-SHA256:DHE-RSA-AES256-SHA:DHE-RSA-AES128-SHA:ECDHE-RSA-DES-CBC3-SHA:EDH-RSA-DES-CBC3-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES128-SHA256:AES256-SHA:AES128-SHA:DES-CBC3-SHA:HIGH:!aNULL:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4";
		ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
		ssl_prefer_server_ciphers on;

		#access_log /data/nginx/logs/freeswitch82.autohome.com.cnaccess.log access;

		keepalive_timeout 65;
        #charset koi8-r;

        #access_log  logs/host.access.log  main;

        location /{
            proxy_http_version 1.1;
            proxy_set_header Upgrade $http_upgrade;
            proxy_set_header Connection $connection_upgrade;
            proxy_read_timeout 86400s;
			proxy_pass http://95f5024653ff52061359b6086677cf24;
        }
        #error_page  404              /404.html;

        # redirect server error pages to the static page /50x.html
        #
        error_page   500 502 503 504  /50x.html;
        location = /50x.html {
            root   html;
        }
    }
}

二、jssip修改

由于是反向代理是以wss的方式连接websocket,直接以wss连接freeswitch则会出现ws连接成功,则sip指令里用的是wss方式,所以要把jssip中wss的sip指令改成ws。
修改jssip-3.0.3.js如下:
在这里插入图片描述

三、测试效果

其中:
Server Websocket:wss://freeswitch123.test.com.cn:443
Server SIP: freeswitch123.test.com.cn
freeswitch123.test.com.cn是 freeswitch服务的域名
端口443是ngnix配置ssl端口
在这里插入图片描述

四、注意

在jssip工具中如果不进行修改,会出现如下错误:
在这里插入图片描述
js控制台有如下错误:

在这里插入图片描述
可以看出wss连接成功了,但sip协议注册失败了。
所以解决办法就是修改jssip中wss连接时对应的sip协议要改成WS。

总结

以上就是ngnix配置wss反向代理的内容:

  1. ngnix的配置,包括ssl证书反向代理配置;
  2. jssip工具对反向代理支持的配置;
  3. 注意事项,不按步骤2修改会发生的错误。
    以上。

配置及jssip下载链接:https://download.csdn.net/download/xxm524/85864701

  • 7
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 7
    评论
Docker是一种容器化技术,可以帮助我们更轻松地部署和管理应用程序。而FreeSWITCH是一种开源的电话软交换解决方案,可以用于构建VoIP通信系统。如果我们想要在Docker容器中部署FreeSWITCH并开启WebSocket Secure(wss),可以按照以下步骤进行操作。 首先,我们需要创建一个Dockerfile文件,用于构建我们的FreeSWITCH容器。在Dockerfile中,我们可以指定所需的基础镜像,安装FreeSWITCH以及其他依赖项,并配置FreeSWITCH支持WebSocket Secure连接。 以下是一个示例Dockerfile文件的内容: ``` # 使用官方的Debian作为基础镜像 FROM debian:latest # 安装依赖项 RUN apt-get update && apt-get install -y freeswitch # 配置FreeSWITCH COPY freeswitch.xml /etc/freeswitch/ COPY autoload_configs/modules.conf.xml /etc/freeswitch/autoload_configs/ # 开启wss RUN sed -i 's|<!-- <X-PRE-PROCESS transport="ws,wss"bind-params="key=cert.pem"/> -->|<X-PRE-PROCESS transport="ws,wss" bind-params="key=cert.pem"/>|' /etc/freeswitch/autoload_configs/event_socket.conf.xml # 暴露FreeSWITCH端口 EXPOSE 5060 5061 5080 8021 # 启动FreeSWITCH CMD ["freeswitch", "-nonat"] ``` 在上述Dockerfile文件中,我们使用了Debian作为基础镜像,并通过apt-get命令安装了FreeSWITCH和其他依赖项。我们还将freeswitch.xml和modules.conf.xml文件复制到了相应的配置目录,并使用sed命令修改了event_socket.conf.xml文件以开启wss支持。最后,我们通过EXPOSE命令暴露了FreeSWITCH的端口,并使用CMD命令启动FreeSWITCH。 接下来,我们可以使用docker build命令来构建我们的FreeSWITCH镜像。在命令行中,我们切换到包含Dockerfile的目录,并运行以下命令: ``` docker build -t freeswitch-wss . ``` 成功构建镜像后,我们可以使用docker run命令来运行容器。运行以下命令即可启动一个新的FreeSWITCH容器: ``` docker run -d -p 5060:5060 -p 5061:5061 -p 5080:5080 -p 8021:8021 freeswitch-wss ``` 现在,我们已经成功将FreeSWITCH部署到了一个Docker容器中,并开启了wss支持。我们可以通过HTTP请求或使用SIP软件来测试和使用FreeSWITCH的功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一马途追

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值