2017-08-13 110 views
0

我的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

回答

0

原來它與cloudflare無關。我在WHM/cpanel服務器上,WHM使用端口2083(SSL)和2087(SSL)。

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

所以最後,雖然cloudflare有2083和2087打開,但不要將這些與cpanel一起使用。

相關問題