于是我就用一个独立版本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