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

标签 azure load-balancing azure-virtual-machine

通过对 Azure 负载平衡集进行实验,似乎没有使用 x-forwarded-for header (正如常规负载平衡器中所期望的那样),而是保留了原始客户端 IP。

例如:

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

这种行为可以得到证实和依赖吗?

最佳答案

您将代理与负载平衡混淆了。代理使用 x-forwarded,负载均衡器不使用(默认情况下)。负载均衡器在 OSI 堆栈中的较低级别工作(尽管您可能会发现各种自称为负载均衡器的东西,但实际上并非如此)。

这里的主要区别在于,代理实际上会解释您的 HTTP 请求,通常会在进程中缓存它,然后再使用更改后的 header 转发它。负载均衡器不必这样做(尽管可以)。他们只是重新路由数据包。一些更高级的负载均衡器支持添加此 header ,但它绝不是默认配置。代理通常默认启用此 header ,并支持删除它。

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

关于Azure 负载平衡集保留客户端 IP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30586920/

相关文章:

azure - 我们可以通过 Azure 事件中心处理图像、视频等媒体文件吗?

azure - MS Azure Webrole - 如何指定 Web 根驱动器存储大小

azure - 如何在 Arure API 管理服务中启用 OAuth 2.0 身份验证?

c# - 是否可以将 Azure 函数标准 DI 容器切换为另一个容器?

azure - Azure 中 VM 之间的时间同步偏差和偏移 (VMSS)

node.js - WebSockets 基于 Cookie 的负载平衡?

docker-compose --scale X nginx.conf 配置

database - 行锁会影响postgreSQL中的主从吗

javascript - 从订阅内的其他 VM 在 Azure 虚拟机上定期运行 power-shell 脚本的最佳方法

azure - 如何在Azure VM上推出最新的.net框架?