Node.js 无法连接到cpanel https上的套接字io服务器
我在服务器上安装了whm并创建了2台主机 一,。app.example.com 2.socket.example.comNode.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('
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
添加到服务器和客户端时,它工作正常