узел https-прокси pathRewrite / маршрутизатор - PullRequest
0 голосов
/ 02 июля 2018

У меня есть два экземпляра одного и того же приложения узла, работающего на порту 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 не происходит, поскольку I всегда заканчивается на target/prod или target/dev. Путь для / dev и / prod не существует, и, следовательно, я получаю страницу не может отображаться ошибка.

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

Спасибо.

1 Ответ

0 голосов
/ 03 июля 2018

«роутер» не вариант

Мало того, что «маршрутизатор» не является документированной функцией 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 , Златовласка, Telebit ), и, открыв несколько выпусков с модулями tls, http и net, я могу вам сказать следующее:

Узел

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

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

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

...