通过nginx进行wss和ws协议转换
项目场景:
一个im项目在测试准备上线的时候,发现微信小程序在正式阶段只支持wss协议
问题描述:
提示:发现微信小程序在正式阶段只支持wss协议,由于通信采用https,所以ws协议无法直接使用,测试开发阶段可以采用ws协议进行
原因分析:
原因在于https和http不能混合使用,wss和ws也是对应的,https下无法使用http和ws协议
解决方案:
于是想到采用nginx代理的方式进行协议转换,解决通信问题,这样既不用修改服务端代码,也不需要修改客户端代码,一举多得。
话不多说,上nginx配置:server {
listen 443 ssl;
server_name localhost;
ssl_certificate cert.pem;
ssl_certificate_key private.key;
ssl_session_timeout 1m;
ssl_protocols SSLv2 SSLv3 TLSv1.2;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256:AES128-SHA:AES256-SHA:RC4-SHA:DES-CBC3-SHA:RC4-MD5;
ssl_prefer_server_ciphers on;
default_type "text/html";
charset "utf-8";
location / {
proxy_pass http://127.0.0.1:8008/;
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_set_header Remote_addr $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_read_timeout 600s;
}
}