【问题标题】:node https-proxy pathRewrite / router节点 https-proxy pathRewrite / 路由器
【发布时间】:2018-07-02 06:40:25
【问题描述】:

我在端口 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 中指定的任何url。
  2. pathRewrite 似乎没有发生,因为我总是以target/prodtarget/dev 结束。 /dev 和 /prod 的路径不存在,因此出现页面无法显示错误。

我不确定我在哪里做错了。有人可以帮忙吗?

谢谢。

【问题讨论】:

    标签: node.js http-proxy node-http-proxy node-https


    【解决方案1】:

    '路由器'不是一个选项

    “路由器”不仅不是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 模块打开 multiple issues 之后,我可以告诉你:

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

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

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

    【讨论】:

    • 感谢@CoolAJ86 的详细回答,目前我对反向代理的需求非常有限,我觉得不需要像nginx 这样的专用服务。我会看看你提到的那些。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-27
    • 2020-08-20
    • 2015-08-02
    • 1970-01-01
    • 2017-12-23
    • 2013-03-25
    相关资源
    最近更新 更多