Azure负载平衡集保留客户端IP

时间:2015-06-02 03:42:21

标签: azure load-balancing azure-virtual-machine

通过试验Azure负载平衡集,似乎未使用x-forwarded-for标头(正如在常规负载平衡器中所期望的那样),而是保留原始客户端IP。

E.g:

app.get('/my-ip', function(req, res) {
    winston.log('/my-ip', 'x-forwarded', req.headers['x-forwarded-for'] || 'none', 'remoteAddress', req.connection.remoteAddress || 'none');
    res.end();
});

结果:

/my-ip x-forwarded none remoteAddress MY_CORRECT_IP

这种行为可以得到确认和依赖吗?

1 个答案:

答案 0 :(得分:7)

您正在使用负载平衡来混淆代理。代理使用x-forwarding,负载均衡器不(默认情况下)。负载平衡器在OSI堆栈中的较低级别工作(尽管您可能会发现各种事情本身就称为负载均衡器)。

这里的关键区别在于,代理实际上会解释您的HTTP请求,通常在过程中将其缓存,然后使用更改的标头转发它。负载均衡器不必(虽然可以)。他们只是重新路由数据包。一些更高级的负载平衡器支持添加此标头,但它永远不是默认配置。默认情况下,代理通常会启用此标头,并支持将其删除。

负载均衡器通常不需要此标头的原因是负载均衡器基本上是路由器,因此它默认维护数据包的原始源IP信息。另一方面,代理充当原始请求的目的地,然后它向新目的地发出新请求,因此原始分组信息通常丢失。比如,如果您在邮件转发工厂工作,并且您打开了人们的邮件,请阅读它,然后将其放入带有您的寄信人地址的新信封中。