2014-09-25 73 views
0

於是我就用一個獨立版本socket.io的(服務器) - >我不聲明任何「HTTP服務器」 它看起來非常像這樣:Socket.IO,SSL,nginx的,目錄路徑

var io = require('socket.io')(); 
io.on('connection', function(socket){}); 
io.listen(3001); 

問題:我的網站在生產環境中完全是HTTPS。 當我嘗試連接到它時(io.connect("https://www.mysite.com:3001")),我收到了ERR_SSL_PROTOCOL_ERROR(在Chrome瀏覽器中測試過)。

當我關閉服務器時,我收到了ERR_CONNECTION_REFUSED。 所以我得出了Node.JS無法處理HTTPS/SSL連接的結論。

我的開發環境是基於HTTP的,所以我沒有問題 - 它像一個魅力。

那麼,我決定嘗試使用nginx將HTTPS傳遞給HTTP連接。

據我所知,在這裏我只有兩個選擇,以便Node.js的連接和主應用程序的連接來區分:

一)子域(〜node.mysite.com)

B)目錄( 〜mysite.com/node)

我選擇了後一個選項,因爲它感覺更容易實現。

所以我增加了一個主要的「服務器」配置以下內(主應用程序前):

location /node { 
    proxy_pass http://127.0.0.1:3001; 
    proxy_redirect off; 
    proxy_set_header X-Real-IP $remote_addr; 
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
    proxy_set_header X-Forwarded-Proto $scheme; 
} 

然後我試圖連接:io.connect("https://www.mysite.com/node"),但無論怎樣,我得到404(未找到)。 我甚至試過這個:io.connect("https://www.mysite.com", {path : /node/})(w和w/o斜線)並嘗試重命名路徑資源等等。

但無濟於事。

當我在瀏覽器中訪問此頁面(當服務器啓動並運行時) - 我看到一個白頁。

我正在做一些非常錯誤的事情嗎?這可以解決嗎? 謝謝大家提前

回答

0

決定去一個子域。因爲我想將連接處理委託給Nginx,而不是使用Node.JS本身來完成。 :)

1

我也使用這樣的SSL連接socket.IO。它做工精細,我...我使用Express引擎

var options = { 
    key: fs.readFileSync('./key.pem', 'utf8'), 
    cert: fs.readFileSync('./server.crt', 'utf8') 
}; 

var app = require('./app'); 
var server = require('https').createServer(options, app), 
io = require('socket.io').listen(server); 
server.listen(port); 
io.sockets.on('connection', function (socket) { 
}); 

,並在客戶端

<script src="/socket.io/socket.io.js"></script> 
<script> 
var socket = io.connect('https://localhost:2406'); 
// on connection to server, ask for user's name with an anonymous callback 
socket.on('connect', function(){}); 
</script> 
+0

謝謝你的答案! 是否有可能避免「創建一個http服務器」? – Dmitri 2014-09-25 18:49:54

+0

即使你沒有明確地創建http服務器,套接字io服務器也會在後臺創建一個。不過,我相信你可以在這裏傳遞options變量(帶有key和cert鏈)作爲io.listen()的第二個參數。值得了解的是,socket.io仍然會在後臺創建一個http服務器,因此您可以自己聲明它,如下所示以及socket.io文檔中所示。 – aembke 2014-09-25 21:46:59

+0

@aembke啊。說得通!我會嘗試! :) 謝謝 – Dmitri 2014-09-26 06:56:40