WS转WSS协议
2020-05-18 本文已影响0人
廖宇亮
1、场景
在微信小程序的直播室里实现即时聊天功能,通过简单的websocket实现实时通讯,一开始使用的协议是ws://。后来因为微信小程序只支持wss协议,所以需要转为wss协议实现websocket连接。
2、前提
要完成转wss协议,需要的步骤:1、申请一个域名;2、一台公网服务;3、域名绑定;4、为域名申请SSL证书;5、配置Nginx代理。
前面的三步已经完成。
3、为域名申请SSL证书,使用的是腾讯云
3.1、云产品->SSL证书,选择免费证书
image.png3.2、输入通用名称和申请邮箱,通用名称就是你的域名,申请邮箱就是你申请域名时使用的邮箱
image.png3.3、选择自动DNS验证,然后确认申请
4、配置Nginx代理实现WS转WSS协议
4.1、nginx引入SSL这模块,如果没有引入会报nginx:[emerg]unknown directive ssl这个错误提示
4.1.1、进入nginx解压目录,执行./configure --with-http_ssl_module命令,添加SSL模块
4.1.2、执行make命令重新编译
4.1.3、在我们执行完做命令后,我们可以查看到在nginx解压目录下,objs文件夹中多了一个nginx的文件,这个就是新版本的程序了。首先我们把之前的nginx先备份一下,然后把新的程序复制过去覆盖之前的即可。
例如:
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak
cp objs/nginx /usr/local/nginx/sbin/nginx
4.2、配置HTTPS server
server {
listen 443;
server_name zyzhuiyi.xyz;
ssl on;
ssl_certificate /etc/nginx/1_zyzhuiyi.xyz_bundle.crt;
ssl_certificate_key /etc/nginx/2_zyzhuiyi.xyz.key;
ssl_session_cache shared:SSL:1m;
ssl_session_timeout 5m;
ssl_ciphers HIGH:!aNULL:!MD5;
ssl_prefer_server_ciphers on;
location /wss {
proxy_pass http://websocket/;
proxy_read_timeout 60s;
proxy_set_header Host $host;
proxy_set_header X-Real_IP $remote_addr;
proxy_set_header X-Forwarded-for $remote_addr;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection 'Upgrade';
}
}
upstream websocket {
server zyzhuiyi.xyz:8888; #这里可以是多个服务端IP(分多行),设置权重就可以实现负载均衡了
}