Узел 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
происходит следующее:
- Он всегда перенаправляет на
target
который указан, а не какой-либо из URL-адресов, указанных вrouter
, - 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
тем же методом проверки, что и выше.
Однако есть и другие варианты:
- Node.js
- написать свой
http-proxy
маршрутизатор с некоторымиurl.parse
а такжеRegExp
магия. - лютик золотистый
- Хоэнхайм
- Красная птица
- написать свой
- golang
Вопросы к себе:
1. Вам нужно это в узле?
Как человек с глубокими и постоянными отношениями любви и ненависти с узлом (я присоединился к v0.2.x дням и имею несколько коммитов в ядре) и кто знаком с его уродливым сетевым стеком (автор Greenlock, Goldilocks, Telebit) и, открыв несколько проблем с модулями tls, http и net, я могу сказать вам следующее:
нод почти наверняка является неподходящим техническим инструментом для работы... но он все равно может быть правильным выбором в зависимости от целевого сообщества
2. Могут ли другие приложения быть в узле?
Какова цель, которую вам нужно перенаправить на различные порты? Не могли бы вы написать эти приложения в качестве плагинов для вашего основного приложения? Или вы поддерживаете произвольные приложения?