【问题标题】:node.js http-proxy redirectnode.js http-proxy 重定向
【发布时间】:2014-06-02 23:20:53
【问题描述】:

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

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

【问题讨论】:

    标签: javascript node.js proxy


    【解决方案1】:

    即使我怀疑您不会相信,我也会发布此答案,但是您希望做的事情使用您的方法是不可行的。网络只是不能那样工作。我在this answer 中详细说明了为什么这是真的。这样做是让您的用户在他们的浏览器设置中将您的节点代理配置为代理服务器,然后像往常一样将他们的目标 URL 放在浏览器地址栏中。这就是网络支持透明代理的方式。试图通过让用户将您的代理地址放在他们的地址栏中来做到这一点作为一种通用方法是不可行的,因为网络并非完全由静态 HTML 页面中的相对链接组成。

    【讨论】:

    • 感谢您的回答彼得。我明白你的意思,这不是我的情况(我认为),因为站点 A 和 B 都是我在反向代理后面构建和托管的站点,基本上我只是将我的两个站点组合成一个 Web 应用程序。我确保站点 B 中的链接也通过我的代理并使用相对路径,并且工作,你启发了我 :)
    • 酷。是的,如果您控制代理背后的所有网站并且可以遵守规则以使其可行。
    猜你喜欢
    • 1970-01-01
    • 2017-10-11
    • 1970-01-01
    • 1970-01-01
    • 2013-11-18
    • 2013-12-20
    • 2017-08-28
    • 2014-12-25
    • 1970-01-01
    相关资源
    最近更新 更多