为什么X-Forwarded-For标头没有被node-express代理设置?

时间:2015-09-26 05:12:56

标签: node.js express proxy

我有一个节点文件,它执行以下操作:

它侦听两个端口:80和443(用于https)。 它将连接重定向到80到443。

在443上是一个反向代理,通过普通的http进行循环重定向到几个本地服务器。

我遇到的问题是,在实际的目标服务器中,我无法获得浏览器的实际远程IP地址。 我得到了反向代理的地址。 请求是由反向代理进行的,所以我猜是这样。

因此,我在反向代理中执行了以下操作(仅显示了相关的代码行):

    proxy = httpProxy.createServer();

    var https_app = express();
    https.createServer(sslCerts, https_app).listen(443, function () {
     ...
    });


    https_app.all("/",function(req, res) {
        ...
        //res.append('X-Forwarded-For',req.connection.remoteAddress);
        proxy.web(req,res, {target: local_server});
        ...
    }

我需要在其请求标头中对代理服务器执行res.append(' X-Forwarded-For',req.connection.remoteAddress)等操作。设置地址的问题是次要的。我首先需要设置标题本身,目标服务器可以读取。代理本身不设置此标头,我认为默认情况下应该这样。还是应该呢?或者它和我做错了什么来读它?

1 个答案:

答案 0 :(得分:1)

我无法看到您对proxy的定义,但我假设它与使用express-http-proxy的以下代码相同。我希望这种替代方法对您有用:

var proxy = require('express-http-proxy');

var myProxy= proxy('localhost:443', {
    forwardPath: function (req, res) {
        return require('url').parse(req.url).path;
    }
});

然后简单地说:

app.use("/*", myProxy);

我希望这会有所帮助。