我的问题是:是http-proxy,reverse-proxy.js还是任何其他能够将到达端口80的所有请求路由到基于其他服务的库(如nginx这样的网络服务器除外)在网址上?
如果端口80带有URL localhost:80/route1
发出了请求,我想将其重定向到localhost:3001
处的服务
如果端口80带有URL localhost:80/another-route
发出请求,我想将其重定向到localhost:3002
处的服务。等等。
总结一下:我想公开1个端口(80),然后根据请求中的URL模式将请求路由到其他服务。 到目前为止,我在下面使用reverse-proxy.js尝试了这种方法,但仅在端口更改时才有效
{
"port": 80,
"routes": {
"localhost/test": "localhost:3001",
"localhost/another-route": "localhost:3002",
"localhost/another-route-same-service": "localhost:3002",
"*": 80
}
}
答案 0 :(得分:0)
当然可以。这是非常常见的要求。在Node中,您可以使用流在本地执行此操作。这是一个仅使用标准Node http库的完整工作示例。
const http = require('http');
const server = http.createServer();
let routes = {
'/test': {
hostname: 'portquiz.net',
port: 80
}
}
function proxy(req, res){
if (!routes[req.url]){
res.statusCode = 404;
res.end();
return;
}
let options = {
...routes[req.url],
path: '', // if you want to maintain the path use req.url
method: req.method,
headers: req.headers
}
let proxy = http.request(options, function(r){
res.writeHead(r.statusCode, r.headers);
r.pipe(res, { end: true });
})
req.pipe(proxy, { end: true }).on('error', err => console.log(err))
}
server.on('request', proxy);
server.listen(8080);