於是我就用一個獨立版本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斜線)並嘗試重命名路徑到資源等等。
但無濟於事。
當我在瀏覽器中訪問此頁面(當服務器啓動並運行時) - 我看到一個白頁。
我正在做一些非常錯誤的事情嗎?這可以解決嗎? 謝謝大家提前
謝謝你的答案! 是否有可能避免「創建一個http服務器」? – Dmitri 2014-09-25 18:49:54
即使你沒有明確地創建http服務器,套接字io服務器也會在後臺創建一個。不過,我相信你可以在這裏傳遞options變量(帶有key和cert鏈)作爲io.listen()的第二個參數。值得了解的是,socket.io仍然會在後臺創建一個http服務器,因此您可以自己聲明它,如下所示以及socket.io文檔中所示。 – aembke 2014-09-25 21:46:59
@aembke啊。說得通!我會嘗試! :) 謝謝 – Dmitri 2014-09-26 06:56:40