是这样的, 我这边的 nodejs 项目的 https 是在 nginx 一层做的, 也就是说 server 端没有 https 部分的东西, 仅在 nginx 一层做了 https 的处理.
问题来了, 我在 nodejs 创建的 socket.io 服务是 http 的, 页面请求的是 https 的, 报了 ERR_INSECURE_RESPONSE
错误,
这种情况该如何处理呢
=========================================================================================================
最后是这么解决的,nodejs 那边还是 http 的服务,socketio 的端口直接就是 http 的端口,
在 nginx 的配置中添加了
proxy_http_version 1.1;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
nginx 配置了全站 https 页面连接 socket, var socket = io() 即可
关键词 nginx proxy websocket,nginx websocket 传送门
完结。
你的socket.io
连接的是哪两端。两端同时使用secure协议咯
nginx https 证书没配好
@DevinXian 页面和nodejs啊, nodejs那边是http的
@magicdawn 证书设置都正常的。页面上获取直接 var socket = io() 就正常了, 但是 io(‘xxx.xxx.xxx.xxx’) 连接就被拒绝了,想不明白。
@Sirormy 你需要在浏览器设置一下,相信你的证书。 浏览器端用wss://domian:port/xxx,
如果https://domian:port或https://domian对应的证书,不是浏览器认为安全的证书,
websocket协议并不会像,通过https访问那样,会给你一个安全警告, 而是直接报ERR_INSECURE_RESPONSE 错误
所以你要做的事情跟简单: 1、通过浏览器访问一下https://domian:port或https://domian, 2、浏览器会给一个警告,说这个网站不安全, 3、点击高级-- > 继续访问
你再次访问wss://domian:port/xxx,就ok 了。
有没有试过nodejs创建服务器的时候就把证书之类的加进去呢
var https = require('https');
var fs = require('fs');
var options = {
pfx:fs.readFileSync('./keys/server.pfx'),
passphrase:'your password'
};
https.createServer(options,function(req,res){
res.writeHead(200);
res.end('hello world\n');
}).listen(3000,'127.0.0.1');
@nnliang 这个倒是试过,但是有人跟我说 nodejs 就应该在 Nginx 层做,两边都做的话没有必要,也浪费CPU
@vincentLiuxiang 证书不是自签的,按理说应该是信任的