【发布时间】:2021-05-02 22:38:53
【问题描述】:
我只是想在他们 POST 之后在 .net-core 控制器中获取客户端 IP 地址。我们在客户端和服务器之间有一个负载平衡器。
我启动时的设置:
services.Configure<ForwardedHeadersOptions>(options =>
{
options.ForwardedHeaders =
ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
});
并配置:
app.UseForwardedHeaders();
然后我尝试调用下面的代码,但它返回的是负载均衡器 IP 地址,而不是客户端 IP:
var clientIpAddress = HttpContext.Connection.RemoteIpAddress.ToString();
我已经尝试了可以在此网站和文档上搜索的所有内容,但似乎没有任何效果。我也试过使用HttpContext.Request.Headers["X-Forwarded-For"]
它返回 null / empty。
我们的 OPS 团队说 IP 没有被平衡器修改,并且应该在 x-Forwarded-For 标头的值中。为什么负载均衡器发回的是它的 IP 而不是客户端的 IP 地址?
【问题讨论】:
-
SO 无法帮助您确定谁错了 - 很明显,如果您在请求中没有看到标头,则标头不存在。要么您不知道您的代码在哪里运行/“客户端”和“服务器”之间的路径上还有哪些其他代理,或者您的 OPS 团队没有告诉您有关标头的所有详细信息......因为您显然已经尝试调用您的代码直接与该标题一起工作,我不明白 SO 有什么帮助。
标签: c# .net iis .net-core x-forwarded-for