2014-09-25 40 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