切换到HTTPS后无法连接到服务器

时间:2017-07-15 20:31:02

标签: html node.js websocket socket.io

所以我切换到了HTTPS,一切都很好地解决了套接字。

如果我尝试使用HTTP访问网站,则套接字会连接,但如果我尝试使用HTTPS连接,我会得到:

控制台错误:

Failed to load resource: net::ERR_CONNECTION_CLOSED
Failed to load resource: net::ERR_CONNECTION_CLOSED
Failed to load resource: net::ERR_CONNECTION_CLOSED
Failed to load resource: net::ERR_CONNECTION_CLOSED

前端:

function connect()
{
    if (!SOCKET)
    {
        var hash = getCookie('hash');
        if (hash == "") {
            //$.notify('You must login!', 'success');
        }
        if (hash != "") {
            $.notify('Connecting...', 'success');
        }
        SOCKET = io(':3001');
        SOCKET.on('connect', function(msg) {
            if (hash != "") {
                //$.notify('Connected!', 'success');
            }
            SOCKET.emit('hash', {
                hash: hash
            });
            $('#games tr').remove();
        });
        SOCKET.on('connect_error', function(msg) {
            $.notify('Connection lost!', 'success');
        });
        SOCKET.on('message', function(msg) {
            onMessage(msg);
        });

        SOCKET.on('disconnect', function(m) {
            SOCKET.emit('disconnect', {
                uhash: hash
            });
        });
    }
    else
    {
        console.log("Error: connection already exists.");
    }
}

的Node.js /后端

var httpsOptions = {
  cert: fs.readFileSync("/path/to/cert/cert.pem"),
  ca: fs.readFileSync("/path/to/cert/chain.pem"),
  key: fs.readFileSync("/path/to/cert/privkey.pem"),
}

var server = require('https').createServer(httpsOptions);
var io = require('socket.io').listen(server);
server.listen(3001);

1 个答案:

答案 0 :(得分:0)

您的Node应用程序应该只接受HTTP连接。您的Apache服务器应该负责HTTPS。这简化了您的应用程序,并允许Apache为您负载均衡,如果您决定这样做。

因此,您的应用程序和Apache之间应该是HTTP,然后是Apache和客户端之间的HTTPS。关于如何执行此操作有很多指南,我建议您阅读official documentation

如果您决定反对这一点,并在网络应用级别实施SSL(不推荐),那么我们需要更多信息。