如何在nodejs中为多个目标设置反向代理
How to set up a reverse proxy in nodejs for multiple targets?
我使用nodejs, expressjs和request来创建反向代理。
我想要的是,当一个请求被发送到http://localhost:PORT/NAME/对应的页面被加载。
例如,输入http://localhost:1234/google/谷歌网站将被加载如果我进入http://localhost:1234/stack/将会加载stackoverflow页面。
我尝试了类似于这里的代码
var request = require('request');
app.get('/google', function(req,res) {
//modify the url in any way you want
var newurl = 'http://google.com/';
request(newurl).pipe(res);
});
问题是,它加载页面,但不是完全,因为页面本身想要加载图像和css和东西,并发出请求/images/example.jpg而这些显然以404错误结束。
对于这个问题,谁有一个方便的解决方案?特别是因为简单地为/images设置路由是不行的,因为我有两个可能的目标服务器,代理不知道哪个是正确的。首先,这是一个转发代理,其次,这是一个你想要的工作代码,修改它作为你喜欢
从http://127.0.0.1:5432/yahoo.com
var request = require('request');
var express = require('express')();
var session = require('cookie-session');
express.set('trust proxy', 1)
express.use(session({
keys: ['key1', 'key2']
}))
express.use(function(req,res,next)
{
if(req.url.indexOf('.com') < 0)
{
request('http://'+req.session.domain+'/'+req.params.site,function(err,response,body)
{
if(err)
res.status(500).send(err);
else
res.send(body);
});
}
else
next();
});
express.get('/:site',function(req,res)
{
request('http://'+req.params.site,function(err,response,body)
{
req.session.domain = req.params.site;
if(err)
res.status(500).send(err);
else
res.send(body);
});
});
express.listen(5432);
相关文章:
- 通过JavaScript设置表单目标
- 如何设置浏览器选项卡's锚定目标名称
- Multer :在目标属性中设置不同的目的地
- AngularJS:将目标(类似于焦点)设置为任何$scope属性
- 如何在删除之前设置 jquery 可排序目标列表的样式
- 包装视频标记的超链接 - 为点击处理程序设置了错误的目标
- 如何将回调顺序调用设置为与目标函数调用相同
- 如何设置目标=“_空白“;在DIV标签中
- 动态设置appendTo目标
- 如何设置应该使用此代码的目标图像
- 如何将OrbitControls目标设置为四处移动
- wordpress在新窗口中打开链接;目标“;属性未设置
- 根据原点和目标设置角度动画视图过渡
- jQueryUI.position()未命中用jQuery.height()设置的目标元素的高度
- 设置@grant值时如何访问“window”(目标页)对象
- 如何在流星中设置事件目标的文本和颜色?
- GruntJS设置:没有找到目标
- 如何动态设置数据目标id
- 设置规则集& lt; p> & lt; a> . . & lt; / a> & lt; / p>根据href目标
- 在Chrome隐身模式下设置Adobe目标PCID,但在正常模式下丢失