只有第一个请求才能在弹性中起作用

时间:2013-12-12 10:52:28

标签: node.js

我们正在使用基于弹性的node.js脚本来管理我们运行的许多小工具。 它将流量代理到某个ip:端口,具体取决于接收主机名。

我们决定将原始reqquest的ip地址添加为“x-forwarded-for”标头并遇到问题。标头仅包含在第一个请求中,而不包含在任何后续请求中。在进一步检查时,我们注意到coude甚至没有被再次执行。

我制作了以下演示来展示我的问题:

var bouncy = require('bouncy');

var server = bouncy(function (req, res, bounce) {
    console.log("test");
    bounce ("echo.200please.com", {headers: {'x-forwarded-for': req.connection.remoteAddress}});
});

server.listen(9000);

“test”仅在第一次请求时写入控制台。我假设在弹性中有一些缓存,但如果是这样的话,我觉得第二次也应该包含自定义标题。

有人知道这里发生了什么,如果这是一个错误或某种特征?

2 个答案:

答案 0 :(得分:0)

这是一项功能。

如果要为过滤器创建日志,可以捕获这样的请求:

server.on('request', function (req, res) {
    console.log(req);
})

server.listen(9000);

答案 1 :(得分:0)

我不知道这是一个功能还是错误,但我正在做的是在应用程序级别存储IP地址。例如,在nodejs中,我这样做:

  var ip = req.headers['x-forwarded-for'] ||
           req.socket.ip ||
           req.connection.remoteAddress ||                
           req.socket.remoteAddress ||
           req.connection.socket.remoteAddress;

  if (req.headers['x-forwarded-for']) {
       req.socket.ip = ip;
  }

现在我在req.socket.ip中有ip地址。不确定这是否是最佳解决方案,但它确实有效。