node.js http-proxy重定向

时间:2014-06-02 23:20:54

标签: javascript node.js proxy

如何在node.js中使用http-proxy模块跟踪重定向,以便在浏览器中保留相同的URL?

我在反向代理后面有两个网站(A和B),用户访问网站A完全通过尊敬的代理,但是在网站A到网站B中有一个使浏览器中的网址发生变化到站点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;
};

1 个答案:

答案 0 :(得分:1)

即使我怀疑你不相信它,我也会发布这个答案,但你希望用你的方法做什么是不可行的。网络就是这样不起作用的。我在this answer中阐述了为什么这是真的。这样做的工作是让您的用户在您的浏览器设置中将节点代理配置为代理服务器,然后像往常一样将其目标URL放在浏览器地址栏中。这就是网络如何支持透明代理。尝试通过让用户将代理地址放在地址栏中来实现这一点并不是一种通用方法,因为Web不是由静态HTML页面中的相对链接组成的。