我使用以下模块中的反向代理 https://github.com/nodejitsu/node-http-proxy
我得到以下代码的错误
proxy.on('error', function (err, req, res) {
res.end('Error occurr'+ err);
});
Run Code Online (Sandbox Code Playgroud)
连接ECONNREFUSED这个错误意味着什么,它可以解决什么问题?
我用
proxy = httpProxy.createProxyServer({});
proxy.web(req, res, {
target: 'http://' + hostname + ':' + port
});
proxy.on('error', function (err, req, res) {
res.end('Error occurr'+ err);
});
Run Code Online (Sandbox Code Playgroud)
我只需要代理对新端口的调用
我想做一个简单的node.js反向代理,在同一个端口80上托管多个Node.JS应用程序以及我的apache服务器.所以我在这里找到了这个例子
var http = require('http')
, httpProxy = require('http-proxy');
httpProxy.createServer({
hostnameOnly: true,
router: {
'www.my-domain.com': '127.0.0.1:3001',
'www.my-other-domain.de' : '127.0.0.1:3002'
}
}).listen(80);
Run Code Online (Sandbox Code Playgroud)
问题是我希望例如app1.my-domain.com指向localhost:3001,app2.my-domain.com指向localhost:3002,而所有其他指向port 3000例如,我的apache服务器将要运行.我在文档中找不到有关如何使用"默认"路由的任何内容.
有任何想法吗?
编辑我想这样做,因为我有很多域/子域由我的apache服务器处理,我不希望每次我想添加一个新的子域时都要修改这个路由表.
我正在尝试实现最简单的示例:
var http = require('http'),
var httpProxy = require('http-proxy');
httpProxy.createServer(function (req, res, proxy) {
//
// I would add logging here
//
proxy.proxyRequest(req, res, { host: 'www.google.com', port: 80 });
}).listen(18000);
Run Code Online (Sandbox Code Playgroud)
当我将浏览器配置为使用此代理并导航到www.google.com时,我没有收到任何回复.我做错了什么?
我正在使用Windows 7 Chrome
我们的服务器依靠客户端证书来验证访问权限。目前,Electron和NW.JS似乎都不支持客户端证书,这使我们无法创建可以连接到服务器的应用程序。
在进行了一些研究之后,似乎应该可以使用node-http-proxy来设置代理服务器,以进行所有通信。看起来可以通过此方法引入客户端证书,本质上是:
客户端请求->代理服务器(添加客户端证书)->服务器(响应)->代理服务器->客户端
我不确定这是否可行,但这就是我的目标。这是我到目前为止的代码:
var cert = fs.readFileSync ("./cert.p12");
var proxy = httpProxy.createProxyServer ({
target: {
host: "devserver",
protocol: "https:",
port: 443,
pfx: cert,
passphrase: "certificatepassword"
},
secure: false,
changeOrigin: true,
xfwd: true,
//agent: https.globalAgent
agent: false
}).listen (8080);
Run Code Online (Sandbox Code Playgroud)
PFX已加载为.p12文件。当我将其设置为Firefox中的代理服务器时,尝试访问我们的开发服务器时出现“安全连接失败”的消息。我尝试了许多不同的方法,但没有更好的结果,而且我不确定如何从这一点继续。
我有一个节点服务器,我正在代理我的api请求http-proxy-middleware,类似于这篇文章中发生的事情.当我代理到真正的生产服务器时,一切正常,但是当我将代理指向本地服务器时,它只是不起作用.
这是我的代码:
app.use('/_api', proxy({target: 'http://localhost:9000', changeOrigin: true}));
服务器上:
http://localhost:9000/hello 工作(我可以从我的浏览器访问它),但是,当我尝试从我自己的服务器访问它时,像这样:
http://localhost:3000/_api/hello
我正进入(状态:
不能GET/_api /你好
如果我用真正的服务器替换localhost:9000,一切正常......
我试图将新的查询参数添加到我的node-http-proxy中的原始请求中,像这样直接调整req.query是行不通的:
app.all(path, function (req, res) {
req.query.limit = 2;
apiProxy.web(req, res, { target: target });
});
Run Code Online (Sandbox Code Playgroud)
这limit目标未收到
我想通过这种方式隐藏 API 密钥,是否可以添加新的查询参数?
我正在运行一个开发代理服务器,在启动时我会使用我们的集群架构请求身份验证令牌。
但是,该令牌在一段时间后就会过期。然后,我不想让开发人员重新启动他们的代理服务器,而是想发出另一个请求来获取另一个有效的身份验证令牌。为了能够自己处理响应,我将该node-http-proxy选项设置selfHandleResponse为 true。
app.use(
'/',
index({
target: config.hostname,
changeOrigin: true,
onProxyReq,
onProxyRes,
selfHandleResponse: true
})
);
Run Code Online (Sandbox Code Playgroud)
现在,我只想处理带有 a 的响应401,因为这是我需要请求另一个令牌的唯一情况。
const onProxyRes = (proxyRes, req, res) => {
if (proxyRes.statusCode === 401) {
getToken()
.then(forwardRequest(req))
.then((response) => {
res.send(response.body);
})
.catch(() => {
res.sendStatus(500);
});
}
// How to pass back the original proxyRes including body, headers etc.?
});
Run Code Online (Sandbox Code Playgroud)
编辑:forwardRequest 是我的函数,用于重试原始请求,然后在成功时将其返回给客户端。
我的麻烦从这里开始,因为我不知道如何将代理的非 401 请求传递回客户端。我发现自己开始实现依赖于标头内容类型的正文解析逻辑,但我非常希望有一种更简单的方法。
有任何想法吗?
request node.js express node-http-proxy http-proxy-middleware
是否有一种方式node.js来获得开连接数和每秒请求数从http服务器?
假设以下简单服务器:
http.createServer(function (req, res) {
res.writeHead(200, {'Content-Type': 'text/plain'});
res.end("Hello World!");
}).listen(80);
Run Code Online (Sandbox Code Playgroud)
谢谢.
在Node上使用连接库,我尝试在使用node-http-proxy代理它之前检索请求体.
从Node v4开始,我们必须使用bodyParser之类的中间件(或者只是请求数据/结束事件)来检索POST请求体.
问题是,它似乎消耗了请求流,并且在被代理时请求超时.
这是代码,首先我用数据事件检索正文,然后我将它提供给http-proxy,但请求超时.
var httpProxy = require('http-proxy');
var connect = require('connect');
var proxy = new httpProxy.createProxyServer({
target: {
host: 'localhost',
port: 9015
}
});
var app = connect()
.use(function (req, res, next) {
var bodyBuffer = '';
req.on('data', function (data) {
bodyBuffer += data;
});
req.on('end', function () {
req.body = buffer;
next();
});
})
.use(function (req, res) {
//I can use req.body now
//But the …Run Code Online (Sandbox Code Playgroud) 我正在尝试创建一个能够处理HTTPS网站的转发代理.我正在尝试观察和修改不同站点的流量.这是我的代码,适用于http网站,但不适用于https网站.
httpProxy.createServer(function(req, res, next) {
//custom logic
next();
}, function(req, res) {
var proxy = new httpProxy.RoutingProxy();
var buffer = httpProxy.buffer(req);
var urlObj = url.parse(req.url);
req.headers.host = urlObj.host;
req.url = urlObj.path;
console.log(urlObj.protocol);
setTimeout(function() {
proxy.proxyRequest(req, res, {
host: urlObj.host,
port: 80,
buffer: buffer,
}
)}, 5000);
}).listen(9000, function() {
console.log("Waiting for requests...");
});
Run Code Online (Sandbox Code Playgroud)
谢谢你的帮助!
我有一个运行在http:// localhost:9090 /的后端服务.所有开始的呼叫/api/*都应转发给它,而不是/api在它前面.因此,当我打电话http://localhost:8080/api/my/route它应该代理http://localhost:9090/my/route.
如果我使用以下选项:
proxy : [{
path : '/api/*',
target : 'http://localhost:9090'
}]
Run Code Online (Sandbox Code Playgroud)
在呼叫时http://localhost:8080/api/my/route,后端服务会抱怨它无法找到路由/api/my/route.
文档建议我可以使用node-http-proxy中的任何选项,但我无法弄清楚要使用的正确选项.
我需要使用哪些选项来获得所需的结果?
我正在尝试使用 Node 的请求模块向 https url 发出请求。下面的代码片段。
var request = require('request')
,r = request.defaults(
{'proxy':'https://localhost:8443',
strictSSL: false,
rejectUnauthorized: false,
});
function sendHttpsReq(){
r.get('https://my.https.url/api/model', function (error, response, body) {
if (!error && response.statusCode == 200) {
console.log(body);
}
});
}
Run Code Online (Sandbox Code Playgroud)
使用上面的代码,如果我使用http代理并发出http请求,代理服务器会收到请求。但对于通过 https 代理的 https url,代理服务器永远不会收到请求。我正在使用在本地服务器上运行的基于节点 http 代理的简单代理服务器。
node-http-proxy ×12
node.js ×11
javascript ×5
http-proxy ×4
proxy ×4
express ×2
connect ×1
electron ×1
http ×1
request ×1
webpack ×1