wss://连接无法建立。。。 nginx+nodejs+websocket
nginx:
#主要是配置原来的ws 和 http 接口
upstream websocket {
server 127.0.0.1:8081;# 远程websocket服务器地址
}
# 通过下面的反向代理到上面的接口去
server {
listen 443;#默认https和wss协议端口
server_name www.xxx.com;
ssl on;
ssl_certificate cert/214058857310906.pem;#你的上传到服务器的证书位置
ssl_certificate_key cert/214058857310906.key;#你的上传到服务器的证书位置
ssl_session_timeout 5m;
ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:ECDHE:ECDH:AES:HIGH:!NULL:!aNULL:!MD5:!ADH:!RC4;
ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
ssl_prefer_server_ciphers on;
#wss协议转发 小程序里面要访问的链接
location /api/broadcast {
proxy_pass http://websocket;
proxy_http_version 1.1; # 必需
proxy_set_header Upgrade $http_upgrade; # 必需
proxy_set_header Connection "Upgrade"; # 必需
proxy_set_header Host $host; # 非必需
proxy_set_header X-Real-IP $remote_addr; # 非必需
proxy_set_header X-Real-Port $remote_port; # 非必需
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; # 非必需
proxy_set_header X-Forwarded-Protocol "$scheme"; # 非必需
}
}
这个配置可以正常访问https://www.xxx.com 如果换成 wss://www.xxx.com 就不行
NodeJs:
var fs = require( 'fs' );
var app = require('express')();
var https = require('https');
app.use(function(req, res, next) {
res.setHeader('Access-Control-Allow-Origin', '*');
res.setHeader('Access-Control-Allow-Credentials', true);
res.setHeader('Access-Control-Allow-Methods', 'POST, GET, PUT, DELETE, OPTIONS');
next();
});
var server = https.createServer({
key: fs.readFileSync('./cert/214058857310906.key'),
cert: fs.readFileSync('./cert/214058857310906.crt'),
ca: fs.readFileSync('./cert/public.pem'),
requestCert: false,
rejectUnauthorized: true
},app);
server.listen(8081);
var io = require('socket.io').listen(server);
io.sockets.on('connection',function (socket) {
socket.emit('news', { hello: 'world' });
socket.on('hhhh', function (data) {
console.log(data);
});
});