我们正在使用基于弹性的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”仅在第一次请求时写入控制台。我假设在弹性中有一些缓存,但如果是这样的话,我觉得第二次也应该包含自定义标题。
有人知道这里发生了什么,如果这是一个错误或某种特征?
答案 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地址。不确定这是否是最佳解决方案,但它确实有效。