Html Can';切换到HTTPS后无法连接到服务器

Html Can';切换到HTTPS后无法连接到服务器,html,node.js,websocket,socket.io,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

所以我切换到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/Backend

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);

您的节点应用程序应该只接受HTTP连接。您的Apache服务器应该负责HTTPS。这简化了您的应用程序,并允许Apache在您决定这样做时为您实现负载平衡

因此,应用程序和Apache之间应该是HTTP,然后是Apache和客户端之间的HTTPS。有很多关于如何做到这一点的指南,我建议阅读


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

您的节点应用程序应该只接受HTTP连接。您的Apache服务器应该负责HTTPS。这简化了您的应用程序,并允许Apache在您决定这样做时为您实现负载平衡

因此,应用程序和Apache之间应该是HTTP,然后是Apache和客户端之间的HTTPS。有很多关于如何做到这一点的指南,我建议阅读



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

实际错误是什么?套接字未连接..AKA i get Connection lost!我不是HTTPS证书方面的专家,但这些证书真的可以应用于端口3001吗?我认为这是行不通的。我认为端口3001是内部的,由Apache访问。我强烈建议使用Apache for HTTPS而不是Node。实际错误是什么?套接字未连接..AKA我失去了连接!我不是HTTPS证书方面的专家,但这些证书真的可以应用于端口3001吗?我认为这是行不通的。我认为端口3001是内部的,由Apache访问。我强烈建议使用Apache for HTTPS而不是Node。这样Node.js服务器就可以与HTTP.createserver保持在HTTP中?是的,您应该将Node服务器绑定到127.0.0.1,这样它只能在内部访问,然后让Apache代理连接到它。因此Apache将接收HTTPS连接,然后通过HTTP将数据传递给节点。这在安全性方面很好,因为它是一种内部通信。顺便说一句,HTTPS已经可以正常工作了,除了Socket.IO没有连接。哦,对了。您可以使用Postman之类的程序与它交互吗?它应该可以,因为Node.js服务器没有提供任何ERORR。我很确定前端js有问题。因此node.js服务器可以与HTTP.createserver一起保留在HTTP中?是的,您应该将节点服务器绑定到127.0.0.1,这样它只能在内部访问,然后让Apache代理连接到它。因此Apache将接收HTTPS连接,然后通过HTTP将数据传递给节点。这在安全性方面很好,因为它是一种内部通信。顺便说一句,HTTPS已经可以正常工作了,除了Socket.IO没有连接。哦,对了。您可以使用Postman之类的程序与它交互吗?它应该可以,因为Node.js服务器没有提供任何ERORR。我很确定正面js有问题。