Узел https-прокси pathRewrite / маршрутизатор

У меня есть два экземпляра одного и того же приложения узла, работающего на порту 3000 а также 4000, Я хотел бы иметь следующее поведение:

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/dev или же https://localhost/prodпроисходит следующее:

  1. Он всегда перенаправляет на target который указан, а не какой-либо из URL-адресов, указанных в router,
  2. PathRewrite, кажется, не происходит, так как я всегда заканчиваю в target/prod или же target/dev, Путь к /dev и /prod не существует и, следовательно, я получаю страницу не может отображаться ошибка.

Я не уверен, где я иду не так с этим. Может ли кто-нибудь помочь?

Благодарю.

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. Вам нужно это в узле?

Как человек с глубокими и постоянными отношениями любви и ненависти с узлом (я присоединился к v0.2.x дням и имею несколько коммитов в ядре) и кто знаком с его уродливым сетевым стеком (автор Greenlock, Goldilocks, Telebit) и, открыв несколько проблем с модулями tls, http и net, я могу сказать вам следующее:

нод почти наверняка является неподходящим техническим инструментом для работы... но он все равно может быть правильным выбором в зависимости от целевого сообщества

2. Могут ли другие приложения быть в узле?

Какова цель, которую вам нужно перенаправить на различные порты? Не могли бы вы написать эти приложения в качестве плагинов для вашего основного приложения? Или вы поддерживаете произвольные приложения?

Другие вопросы по тегам