nodejs 配置https 该如何处理socket.io 的连接问题呢
发布于 8 年前 作者 Sirormy 12012 次浏览 来自 问答

是这样的, 我这边的 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 传送门

完结。

9 回复

你的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 证书不是自签的,按理说应该是信任的

回到顶部