Websocket
的协议分为未加密版本ws
和加密版本wss
,线上的产品为了安全,建议使用wss
。
当前的IM
是第一版的单机部署
,并且流量都是通过SLB
转发的到某一台固定的服务器,同时该服务器上还部署了一个Nginx
来进行流量转发。
Client → SLB → Nginx → WB-Server
此处特别注意阿里与的共享SLB
是不是支持 Websocket
的哦。
假设如下情形:
websocket
的 域名
是https://im.domain.com/ws
Nginx
监听端口是 1234
Websocket-Server
监听的端口是6666
具体内容如下所示
Client → SLB:443 → Nginx:1234 → WB-Server:6666
那么我们需要经过如下几个步骤
SLB
绑定域名im.domain.com
,并建立HTTPS
的443
监听小技巧:在 SLB 上绑定通配符域名,再利用
转发策略
来处理具体的映射,这样就可以让这个SLB
通过扩展域名管理
来绑定更多的域名
wb
,添加对应的服务器,再将其端口设置为1234
转发策略
:其中域名填写im.domain.com
,url 填写ws
,虚拟服务器绑定提供IM
的服务器。IM
服务器所在的Nginx
上,配置如下信息upstream IMServer {
server 192.168.0.11:6666;
}
server {
listen 1234;
server_name im.domain.com;
access_log /var/log/nginx/logs/im/access.log main;
location /ws {
#head 请求不记录日志
if ($request_method = HEAD) {
access_log off;
}
#反向代理的后端地址
proxy_pass http://IMServer;
real_ip_header X-Forwarded-For;
#设置主机头和客户端真实地址,以便服务器获取客户端真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
#禁用缓存
proxy_buffering off;
# 升级http1.1到 websocket协议
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
}
}
Nginx
的配置文件。上面就是一次简单的运维记录,有问题,可以留言沟通!
2020年06月04日21:35:49 下班