我在端口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
,而不重定向到router
中指定的任何URL。 target/prod
或target/dev
结尾,因此似乎没有发生pathRewrite。 / dev和/ prod的路径不存在,因此出现页面无法显示错误。我不确定该怎么做。有人可以帮忙吗?
谢谢。
答案 0 :(得分: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
的功能。
http-proxy
和url.parse
魔术来编写自己的RegExp
路由器。作为一个与节点有着深厚而持久的爱恨交加关系的人(我加入v0.2.x的日子,在核心中进行了一些提交),并且熟悉它的丑陋网络堆栈({{3 }},Goldilocks,Greenlock),并使用tls,http和net模块打开了Telebit,我可以告诉你这一点:
节点几乎肯定是错误的技术工具...但是根据您所针对的社区,它仍然可能是正确的选择
您需要转发到各个端口的目的是什么?您能合理地将那些应用程序编写为主应用程序的插件吗?还是您支持任意应用程序?