Javascript node.js http代理重定向

Javascript node.js http代理重定向,javascript,node.js,proxy,Javascript,Node.js,Proxy,如何使用node.js中的http代理模块跟踪重定向,以便在浏览器中保持相同的url 我有两个网站(a和B)在反向代理后面,用户通过revere代理访问站点a非常完美,但是在站点a到站点B中有一个使浏览器中的url更改为站点B,它仍应在浏览器中显示反向代理url 这是我当前的代码 var port = process.env.PORT; var http = require('follow-redirects').http, httpProxy = require('http-prox

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

我有两个网站(a和B)在反向代理后面,用户通过revere代理访问站点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支持透明代理的方式。作为一种通用方法,试图让用户将您的代理地址放在地址栏中是不可行的,因为web并非完全由静态HTML页面中的相对链接组成。

谢谢您的回答。我明白你的意思,这不是我的情况tho(我认为),因为站点A和B都是我在反向代理后构建和托管的站点,基本上我只是将我的两个站点组合成一个web应用程序。我确保站点B中的链接也可以尝试使用我的代理并使用相对路径,并且成功了,你启发了我:)酷。是的,如果你控制了代理背后的所有站点,并且能够遵守规则使之可行。