![](/img/trans.png)
[英]How do I use node.js http-proxy for logging HTTP traffic in a computer?
[英]Node.js - How would I forward HTTP traffic (reverse proxy)?
我需要本质上是反向代理的东西,但是我需要在Node.js中使用它,因为我将不得不添加一些自定义功能。
gateway
将是唯一可见的服务,它需要将流量转发到内部服务网络。 简单的302在这里不起作用。
鉴于Node.js的异步特性,我该如何现实地实现它?
是否有为此使用的知名库?
使用纯核心模块(可能有点难看,但有效):
var http = require('http');
http.createServer(function (request, response) {
if (request.headers.host === 'api.test') {
// request data from 172.17.0.1:80
} else if (request.headers.host === 'test') {
// request data from 172.17.0.2:80
} else {
// Do something else
}
}).listen(80);
如果您不喜欢此示例,则可以尝试: https : //www.npmjs.org/package/turtle.io
我使用node-http-proxy
来管理它,其中http://first.test/和http://second.test/是主机名。
var http = require('http'),
httpProxy = require('http-proxy');
var proxy = httpProxy.createProxyServer({});
// reverse proxy server
http.createServer(function (req, res) {
var target = '';
if (req.headers.host.match(/first.test/)) {
target = 'http://127.0.0.1:8001';
} else if (req.headers.host.match(/second.test/)) {
target = 'http://127.0.0.1:8002';
}
console.log(req.headers.host, '->', target);
proxy.web(req, res, { target: target });
}).listen(8000);
// test server 1
http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('8001\n');
res.write(JSON.stringify(req.headers, true, 2));
res.end();
}).listen(8001);
// test server 2
http.createServer(function(req, res) {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.write('8002\n');
res.write(JSON.stringify(req.headers, true, 2));
res.end();
}).listen(8002);
对于使用反应堆模式(例如节点)的简单反向代理,我将签出nginx。 但是,您提到您想使用节点添加一些自定义功能,所以这是一个现实的目标吗? 绝对! 在设计反向代理时,需要考虑以下几点:
祝您反向代理事业顺利! 如果我有其他事情发生,我将进行更新。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.