2

我有两个在端口30004000. 我想有以下行为:

https://localhost/dev ==> http://localhost:3000 https://localhost/prod ==> http:// localhost:4000

我有以下代理:

var fs = require('fs'),
    httpProxy = require('http-proxy');

var PATH_TO_KEY = "/home/wow/browser.key",
    PATH_TO_CERT = "/home/wow/browser.crt",
    PATH_TO_CHAIN = "";

var options = {
  ssl: {
    key: fs.readFileSync(PATH_TO_KEY, 'utf8'),
    cert: fs.readFileSync(PATH_TO_CERT, 'utf8'),
    //ca : fs.readFileSync(PATH_TO_CHAIN, 'utf8')
  },

  target: "http://localhost:4000", // this is prod
  ws: true,
  xfwd: true,
  router: {
    'https://localhost/dev': 'http://127.0.0.1:3000/',
    'https://localhost/prod': 'http://127.0.0.1:4000/',
  },
  pathRewrite: {
    '^/dev' : '/',     // remove /dev/ path
    '^/prod' : '/'           // remove /prod/ path
  },
};
var server = httpProxy.createProxyServer(options).listen(443);

但是,当我访问https://localhost/devhttps://localhost/prod时,会发生以下情况:

  1. 它总是重定向到target指定的,而不是router.
  2. pathRewrite 似乎没有发生,因为 I 总是以target/prodor结尾target/dev。/dev 和 /prod 的路径不存在,因此出现页面无法显示错误。

我不确定我哪里出了问题。有人可以帮忙吗?

谢谢。

4

1 回答 1

1

“路由器”不是一个选项

'router' 不仅不是 的记录功能http-proxy,而且根本不是 的功能http-proxy

git clone https://github.com/nodejitsu/node-http-proxy.git
> Cloning into 'node-http-proxy'...
> remote: Counting objects: 5786, done.
> remote: Total 5786 (delta 0), reused 0 (delta 0), pack-reused 5785
> Receiving objects: 100% (5786/5786), 1.30 MiB | 6.06 MiB/s, done.
> Resolving deltas: 100% (2784/2784), done.
pushd node-http-proxy/
grep -r 'router' .
> # empty output

它也不是它的任何依赖项的特性:

npm install
grep -r 'router' .
> # empty output again

它也不是 的一个特征https-proxy,通过与上面看到的相同的检查方法。

但是,还有一些其他选择:

要问自己的问题:

1.你在节点中需要这个吗?

作为一个与 node 有着深厚而持久的爱恨交织关系的人(我加入了 v0.2.x 时代,并且在核心中有一些提交)并且熟悉它的丑陋网络堆栈(Greenlock、Goldilocks、Telebit的作者) ,并且已经打开了 tls、http 和 net 模块的多个问题,我可以告诉你:

node 几乎可以肯定是不适合这项工作的技术工具......但它可能仍然是正确的选择,具体取决于您所针对的社区

2.其他应用程序可以在节点中吗?

您需要转发到各个端口的目的是什么?你能合理地将这些应用程序写成你的主应用程序的插件吗?或者您是否支持任意应用程序?

于 2018-07-03T06:11:23.833 回答