专业版IM服务的网络配置
网络配置是野火专业版IM服务部署最复杂的一部分。这里想用这篇文章来说清楚专业版IM服务的网络情况和给出如何配置专业版IM服务的网络。
1. 名词解释
- JS客户端,指基于JS协议栈的客户端,包括Web客户端和小程序客户端,通过websocket与IM服务建立长连接。
- 原生客户端,指基于C++协议栈的客户端,包括所有移动端客户端和PC客户端,通过TCP与IM服务建立长连接。
- 公网地址或者公网IP,这里是个相对概念,是指客户端可以直接连到的地址,在互联网上就是公网IP地址,在政企专网内,是所有客户端能够访问到的地址。
- NG和负载均衡,野火的部分部署方式需要负载均衡,一般情况下NG就可以很好的满足需求。也有部分客户有更昂贵的负载均衡或者其他工具。下面提到的NG都代指这类工具,并不是只能用NG。可以替换为其他负载工具,配置也可以参考NG的配置
2. 专业版IM服务的网络工作流程
无论如何部署,客户端(包括原生客户端和JS客户端)和专业版IM服务的关于网络的工作流程都是如下:
- 客户端HTTP调用IM_HOST地址(授权地址),如果是JS客户端也可能是HTTPS调用IM_HOST地址。
- IM服务收到请求后,根据客户端的信息计算分配这个客户端所属节点,并把所属节点的网络配置返回给客户端,包括server.ip和端口,如果是原生客户端,端口包括HTTP_PORT和PORT。如果是JS客户端,端口包括WS_PORT和WSS_PORT。这个发现客户端所属网络信息的过程简称为路由,可能不是特别准确,知道是这个意思就行。可以在日志中看到
/route
的请求。 - 客户端收到所属的节点的配置,然后建立长连接,原生客户端还有短连接的请求。
3. 端口的限制
野火是绑定80端口的,具体方法是在客户端协议栈内强制路由时使用80端口。除此之外,对其他端口没有任何限制。所以在网络配置中,除了80端口以外,其他端口都可以任意修改。对于政府单位或者大国企,因为安全政策原因,无法使用80端口的,可以找我们申请更换端口,可以绑定使用另外一个端口。此时可以把配置文件中的所有80端口改成这个端口。
4. Web客户端HTTPS的说明
Web客户端可以有HTTP和HTTPS两种情况,只有在HTTPS的情况下,Web客户端才可以支持音视频通话(WebRTC的安全限制)。如果要支持HTTPS,需要与IM服务的交互全都是SSL的(HTTPS和WSS)。
5. 网络相关的配置
##服务的节点地址
server.ip im.wildfirechat.cn
##原生客户端长链接端口。
port 1883
##客户端短链接端口。
http_port 80
##本地绑定HTTP端口
local_port 80
## HTTPS端口配置,仅在单机版时需要打开,其它模式不要打开。
#https_port 443
## WEB客户端长链接端口。单机和集群版时都打开。
websocket_port 8083
## Websocks端口。单机版时打开,其它模式不要打开。
#secure_websocket_port 8084
## 证书和密码。https_port和secure_websocket_port使用的证书。
## 证书是server.ip的域名的证书,证书不能使用自签名证书。
## 证书的格式是JKS,Java应用使用的类型,证书颁发后有可能有2个密码下面分别填上,也有可能只有一个密码,下面两个密码填上同样的密码。
#jks_path /home/ubuntu/.cert/im.wildfirechat.cn.jks
#key_store_password 628608buva
#key_manager_password 628608buva
## Web代理设置。
## websocket_proxy_host地址填写nginx所在服务的域名,配置nginx的SSL证书。
## nginx监听websocket_proxy_secure_port端口,并把请求转发到websocket_port端口。请参考专业版软件包nginx目录下的proxy目录。
## 配置代理地址
#websocket_proxy_host im.example.com
## 配置代理端口,下面两个端口至少要配置一个
## 如果Web客户端使用https,需要配置SecurePort,如果使用http,需要配置Port。
#websocket_proxy_port 5017
#websocket_proxy_secure_port 5017
上面port
端口是TCP长连接端口;local_port
为本地绑定的http端口,http_port
为客户端连接的http端口,在部分场景下这2个端口是同一个,在部分场景下,是不同的,但无论如何,客户端调用http://server.ip:http_port
的请求都会到达服务的local_port
端口。
6. 野火IM专业版部署方法
部署方法有单机部署、多节点直连和单入口模式3种办法。分别对应不同的场景。
- 单机部署:这种部署方式最简单,只部署一台IM服务,且IM服务的地址和端口公网暴露。有种情况是IM服务部署在内网,然后用端口映射的方法,这种情况也算单机部署。
- 多节点直连:这种部署方式在常见普通客户中最常见,部署多个节点,每个节点都有公网地址和端口。另外还有一个NG。只有一个节点和NG,也算是多节点直连。
- 单入口模式:这种部署方式常见一些政企客户,只有一个公网地址部署NG,所有节点都只有内网地址,所有请求都只能通过NG中转,即使只有一个节点,也算是单入口模式。
简单来说,如果只有一个节点且具有公网地址不使用NG就是单机部署;如果每个节点都有公网IP地址还有一个NG入口就是多节点直连(只有一个节点也算);如果多个节点只有一个公网地址部署NG就是单入口模式(只有一个节点也算)。