为什么node.js服务器不能在我的子域上工作(在WHM服务器上使用cloudflare)?

为什么node.js服务器不能在我的子域上工作(在WHM服务器上使用cloudflare)?

问题描述:

我的node.js服务器精美的作品在我的直播网站“https://www.example.com”,但发展环境引发以下控制台错误:为什么node.js服务器不能在我的子域上工作(在WHM服务器上使用cloudflare)?

“的XMLHttpRequest无法加载https://dev.example.com:2083/socket.io/?EIO=3&transport=polling&t=LtTLz1_无‘访问控制允许来源’标头是存在的。在请求的资源上,原因'https://dev.example.com'因此不被允许访问。该响应具有HTTP状态码522.“

我使用CloudFlare的,我有两个Node.js的服务器上运行,现场服务器上的端口2053上运行和开发上的端口2083

我尝试了几种方法来添加页眉接入控制 - 运行允许来源:*并没有什么似乎工作。

这里是我的node.js脚本的顶部:

var fs = require('fs'); 

var options = { 
    ca: fs.readFileSync(__dirname + '/ca.pem'), 
    key: fs.readFileSync(__dirname + '/file.pem'), 
    cert: fs.readFileSync(__dirname + '/file.crt') 
}; 

var express = require('express'), 
app = express(); 

app.use(function(req, res, next) { 
    res.header("Access-Control-Allow-Origin", "*"); 
    res.header("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept"); 
    next(); 
}); 

var https = require('https'), 
server = https.createServer(options, app), 
io = require('socket.io').listen(server); 

server.listen(2083); 

有我丢失的东西吗?

+2

这是一个cloudflare连接超时问题,而不是一个CORS问题(仔细检查配置) – samsonthehero

+0

如果您试图使一个不同于网页加载的主机的socket.io连接,那么您需要或者将CORS支持添加到您的socket.io服务器(以允许跨源连接),或者您需要使socket.io仅与webSocket连接(无初始轮询),因为webSocket连接不受CORS影响。 – jfriend00

+0

以下是如何强制socket.io只使用webSocket并避免CORS:[Socket.io 1.x:只使用WebSockets?](https://stackoverflow.com/questions/28238628/socket-io-1x -use-websockets-only/28240802#28240802)和[如何为CORS配置socket.io](https://stackoverflow.com/a/38749535/816620)。 – jfriend00

原来它与cloudflare无关。我在WHM/cpanel服务器上,WHM使用端口2083(SSL)和2087(SSL)。

我用端口8443来代替,它的工作原理非常漂亮。

所以最后,虽然cloudflare有2083和2087打开,但不要将这些与cpanel一起使用。