繁体   English   中英

从负载均衡器后面的 DefaultHubCallerContext 获取 Ip

[英]Getting Ip from DefaultHubCallerContext behind a load balancer

我有一个带有 SignalR 集线器的.Net 5 应用程序,我想从“X-forwarded-for”获取客户端的 IP。 我的应用程序位于负载均衡器后面,因此获取 RemoteIpAddress 始终返回 10.xxx Ip。

从 HubCallerContext 开始,我可以从其功能中获取 IHttpConnectionFeature

var httpReq = Context.Features.Get<IHttpConnectionFeature>();

调试时我可以看到 object 包含一个RequestHeader ,但我只能访问LocalIpAddressRemoteIpAddressLocalPortConnectionId

调用httpReq.RequestHeaders不会让我编译应用程序。

有什么方法可以从IHttpConnectionFeatureDefaultHubCallerContext获取标头?

您可以使用来自Microsoft.AspNetCore.Builder.ForwardedHeadersExtensions的中间件IApplicationBuilder#UseForwardedHeaders

此中间件将RemoteIpAddress更新为客户端的 IP,只要所有代理正确更新 header X-Forwarded-For并且选项正确(我们必须硬编码代理的数量或告诉我们可以信任的 IP/网络)。

在您的Startup.cs中,将以下中间件添加到Configure方法中:

app.UseForwardedHeaders();

然后在ConfigureServices中,您必须对其进行配置:

services.Configure<ForwardedHeadersOptions>(options =>
{
 ...
});

有关选项的更多信息,请参见: https://docs.microsoft.com/en-us/aspnet/core/host-and-deploy/proxy-load-balancer?view=aspnetcore-6.0#forwarded-headers-middleware -选项

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM