gpt4 book ai didi

javascript - 如何在nodejs中为多个目标设置反向代理?

转载 作者:行者123 更新时间:2023-12-02 16:05:50 24 4
gpt4 key购买 nike

我正在使用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 - 如何在nodejs中为多个目标设置反向代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30757903/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com