![](/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.