2

我想要一个具有基于路径的路由的代理。但我的代码不起作用

var httpProxy = require('http-proxy')

var proxy = httpProxy.createProxy();

var options = {
'example.com/app1': 'http://localhost:4444',
'example.com/app2': 'http://localhost:3333'
}

require('http').createServer(function(req, res) {
proxy.web(req, res, {
    target: options[req.headers.host]
},function(error) {

});
}).listen(80);

问题如何?

感谢帮助

4

2 回答 2

2

您可能想尝试express-http-proxy,它可以让您将代理安装在快速路由上:

app.use('/app1/', proxy('http://localhost:4444', {
    forwardPath: function(req, res){
      return url.parse(req.url).path.replace(/\/app1/,'/');
    }
  })
);

即使您要求使用 node.js 解决方案,我也不能真正建议采用这条路线(没有双关语)。你可能会更好地使用在这个特定用例中经过更多测试的东西——比如 nginx:

location /app1/ {
  proxy_pass http://localhost:4444;
}
于 2014-09-23T16:46:47.257 回答
1

最新版本的 http-proxy 删除了 proxytable 功能。请参阅https://github.com/nodejitsu/node-http-proxy/blob/master/UPGRADING.md 版本 0.8.x 可以进行基于路径的路由。对于当前的 http-proxy,中间件可以为它做代理(https://github.com/dominictarr/proxy-by-url

于 2014-04-07T06:56:38.213 回答