node.js http-proxy redirect

node.js http-proxy redirect

本文关键字:redirect http-proxy js node      更新时间:2023-09-26

我如何在node.js中使用http代理模块遵循重定向,以便我可以在浏览器中保持相同的url ?

我有两个网站(a和B)背后的反向代理,用户访问网站a通过反向代理完美,但有一个在网站a到网站B,使url在浏览器更改到网站B,它应该仍然显示在浏览器中的反向代理url

这是我当前的代码

var port = process.env.PORT;
var http = require('follow-redirects').http,
    httpProxy = require('http-proxy'),
    url = require('url');
// http Server 
var proxy = new httpProxy.createServer({});
var httpServer = http.createServer(function (req, res) {
    console.log('request received: ' + req.path);    
    var target = 'http://siteA/';
    if (!req.url.toString().endsWith('/')) {
        target = target + '/';
    }
    if (req.url.toString() != '/') {
        target = target + req.url;
    }
    console.log('routing request to ' + target);
    var urlObj = url.parse(req.url);
    req.headers['host'] = urlObj.host;
    req.headers['url'] = urlObj.href;
    proxy.proxyRequest(req, res, {
        host: urlObj.host,
        target: target,
        enable: { xforward: true }
    }); 
});
httpServer.listen(port);
console.log("server listening at port: " + port);
String.prototype.endsWith = function (s) {
    return this.length >= s.length && this.substr(this.length - s.length) == s;
}
String.prototype.startsWith = function (str) {
    return this.indexOf(str) == 0;
};

我要把这个答案贴出来,尽管我怀疑你不会相信,但你希望做的事情使用你的方法是不可行的。网络不是这样运作的。我在这个回答中详细说明了为什么这是正确的。这样做的工作是让你的用户在他们的浏览器设置中将你的节点代理配置为代理服务器,然后像往常一样将他们的目标url放在浏览器地址栏中。这就是网络支持透明代理的方式。让用户把你的代理地址放在他们的地址栏里,作为一种通用的方法是不可行的,因为web并不是完全由静态HTML页面中的相对链接组成的。