Node.js 无法连接到cpanel https上的套接字io服务器

Node.js 无法连接到cpanel https上的套接字io服务器,node.js,socket.io,devops,Node.js,Socket.io,Devops,我在服务器上安装了whm并创建了2台主机 一,。app.example.com 2.socket.example.com const app = require("express")(); const fs = require("fs") const https = require("https") const https_server = https.createServer({ key: fs.readFileSync('

我在服务器上安装了whm并创建了2台主机

一,。app.example.com 2.socket.example.com

const app = require("express")();

const fs = require("fs")
const https = require("https")
const https_server = https.createServer({
    key: fs.readFileSync('./server.key'),
    cert: fs.readFileSync('./server.cert')
},app);


const options = {
    cors : {
        origin : "*"
    }
};
const io = require("socket.io")(https_server, options);

io.on("connection", socket => { /* ... */ });

https_server.listen(8001);

<script>
const socket = io("https://socket.example.com:8001",{
        secure: true ,
    }) ;

    socket.on("connect",() => {
        console.log("connected")
    })

    socket.on("message",( e ) => {
        console.log( e )
    })
</script>
我在app.example.com上获得了我的laravel应用程序 我正在尝试在socket.example.com上创建套接字服务器

const app = require("express")();

const fs = require("fs")
const https = require("https")
const https_server = https.createServer({
    key: fs.readFileSync('./server.key'),
    cert: fs.readFileSync('./server.cert')
},app);


const options = {
    cors : {
        origin : "*"
    }
};
const io = require("socket.io")(https_server, options);

io.on("connection", socket => { /* ... */ });

https_server.listen(8001);

<script>
const socket = io("https://socket.example.com:8001",{
        secure: true ,
    }) ;

    socket.on("connect",() => {
        console.log("connected")
    })

    socket.on("message",( e ) => {
        console.log( e )
    })
</script>
套接字服务器 托管在socket.example.com上

const app = require("express")();

const fs = require("fs")
const https = require("https")
const https_server = https.createServer({
    key: fs.readFileSync('./server.key'),
    cert: fs.readFileSync('./server.cert')
},app);


const options = {
    cors : {
        origin : "*"
    }
};
const io = require("socket.io")(https_server, options);

io.on("connection", socket => { /* ... */ });

https_server.listen(8001);

<script>
const socket = io("https://socket.example.com:8001",{
        secure: true ,
    }) ;

    socket.on("connect",() => {
        console.log("connected")
    })

    socket.on("message",( e ) => {
        console.log( e )
    })
</script>
客户 托管在app.example.com上

const app = require("express")();

const fs = require("fs")
const https = require("https")
const https_server = https.createServer({
    key: fs.readFileSync('./server.key'),
    cert: fs.readFileSync('./server.cert')
},app);


const options = {
    cors : {
        origin : "*"
    }
};
const io = require("socket.io")(https_server, options);

io.on("connection", socket => { /* ... */ });

https_server.listen(8001);

<script>
const socket = io("https://socket.example.com:8001",{
        secure: true ,
    }) ;

    socket.on("connect",() => {
        console.log("connected")
    })

    socket.on("message",( e ) => {
        console.log( e )
    })
</script>
我可以从localhost连接到socket.example.com:8001,但无法从app.example.com连接

const app = require("express")();

const fs = require("fs")
const https = require("https")
const https_server = https.createServer({
    key: fs.readFileSync('./server.key'),
    cert: fs.readFileSync('./server.cert')
},app);


const options = {
    cors : {
        origin : "*"
    }
};
const io = require("socket.io")(https_server, options);

io.on("connection", socket => { /* ... */ });

https_server.listen(8001);

<script>
const socket = io("https://socket.example.com:8001",{
        secure: true ,
    }) ;

    socket.on("connect",() => {
        console.log("connected")
    })

    socket.on("message",( e ) => {
        console.log( e )
    })
</script>
错误


这是因为
socket.example.com
app.example.com
共享同一个域,并且
socket.example.com
不允许跨源请求,所以在尝试从本地主机连接时抛出错误。尝试在socket.example.com的虚拟主机中白名单本地主机,或者尝试下面的解决方案

试试这个

在您的虚拟主机文件中,将ServerName从
localhost
更改为
test.example.com
,或者如果没有名称
test.example.com
则创建如下所示的虚拟主机文件

NameVirtualHost *:80
<VirtualHost *:80>
    ServerName test.example.com
    DocumentRoot /path/to/project/doc/root
    ErrorLog "var/log/error_log"
    CustomLog "var/log/access_log" common
</VirtualHost>
NameVirtualHost*:80
ServerName test.example.com
DocumentRoot/path/to/project/doc/root
ErrorLog“var/log/error\u log”
自定义日志“var/log/access\u log”通用
并在文件
/etc/hosts

127.0.0.1 test.example.com

然后尝试从浏览器中使用
test.example.com
访问您的本地应用程序。
它应该可以工作。

这是因为
socket.example.com
app.example.com
共享同一个域,并且
socket.example.com
不允许跨源请求,所以在尝试从本地主机连接时引发错误。请尝试在
socket.example.com的
虚拟主机中白名单本地主机。@Hrishi tnx,我应该将/etc/hosts编辑为root并添加
127.0.0.1 test.example.com
?为什么要测试?请检查下面的ans。您可以使用任何子域(如
local.example.com
)来创建虚拟主机,而不是
test.example.com
,只是域应该与套接字相同server@Hrishi它不工作,但tnx我不知道为什么,但当我将
allowio3:true
添加到服务器和客户端时,它工作正常