我在云中运行了一个nodejs websocket服务器,我可以从公司防火墙外的任何位置建立安全的Web套接字连接。 现在,如何在从公司代理(内部部署)后面的资源创建websocket连接时提供代理信息?我正在使用https://github.com/websockets/ws中的这个nodejs模块。
执行以下代码时出现EHOSTUNREACH错误。请注意,云资源和内部部署资源之间没有VPN连接。
**var wss = new WebSocket('wss://cloudserver:443', {
rejectUnauthorized: false
});**
使用下面的示例代码,我可以使用代理信息从公司代理后面的资源建立到云的http连接,但无法弄清楚如何使其与Web套接字一起工作。
**var Http = require('http');
var req = Http.request({
host: 'proxy',
port: 8080,
method: 'GET',
path: 'http://cnn.com/' // full URL as path
}, function (res) {
res.on('data', function (data) {
console.log(data.toString());
});
});
req.end()
**
我也看了下面的http://blog.vanamco.com/proxy-requests-in-node-js/,它似乎有我需要的东西,但由于我是nodejs的新手,我在这里有些迷失。
答案 0 :(得分:0)
好EHOSTUNREACH
意味着无法找到DNS为目标服务器提供的IP地址的网络路由。
这可能是来自本地DNS服务器的DNS错误(错误的IP地址)或路由错误(错误或丢失到该IP地址的路由),或者可能是故意没有到目标地址的路由(私有网络或公司)网络阻塞事物)。
您可以通过查看是否从工作和家庭获得该主机的相同IP地址来检查DNS方面。一个简单的ping hostname
将显示IP地址。如果目标服务器支持ping请求,它还会告诉您主机是否可访问。您还可以从家庭和工作中检查tracert hostname
,并查看丢失的地方。
答案 1 :(得分:0)
通过使用websocket-node(https://github.com/theturtle32/WebSocket-Node/)提供代理信息,我能够连接到我的云实例 模块如下。实际的网址被替换为' xxx'出于安全原因。谢谢所有试图提供帮助的人。
var fs = require('fs');
var client = new WebSocketClient();
var tunnel = require('tunnel');
var net = require('net');
var tunnelingAgent = tunnel.httpsOverHttp({
rejectUnauthorized: false,
proxy: {
host: 'xxxxxxxx',
port: 8080,
}
});
var requestOptions = {
agent: tunnelingAgent,
rejectUnauthorized: false,
strictSSL: false,
requestCert: false,
};
var headers = {
};
client.connect('wss://xxxxxx',null, 'xxxxxx', headers, requestOptions);