为什么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);
有我丢失的东西吗?
答
原来它与cloudflare无关。我在WHM/cpanel服务器上,WHM使用端口2083(SSL)和2087(SSL)。
我用端口8443来代替,它的工作原理非常漂亮。
所以最后,虽然cloudflare有2083和2087打开,但不要将这些与cpanel一起使用。
这是一个cloudflare连接超时问题,而不是一个CORS问题(仔细检查配置) – samsonthehero
如果您试图使一个不同于网页加载的主机的socket.io连接,那么您需要或者将CORS支持添加到您的socket.io服务器(以允许跨源连接),或者您需要使socket.io仅与webSocket连接(无初始轮询),因为webSocket连接不受CORS影响。 – jfriend00
以下是如何强制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