![](/img/trans.png)
[英]Is it possible from WCF client to get the service IP behind a load balancer?
[英]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
,但我只能访问LocalIpAddress
、 RemoteIpAddress
、 LocalPort
和ConnectionId
。
调用httpReq.RequestHeaders
不会让我编译应用程序。
有什么方法可以从IHttpConnectionFeature
或DefaultHubCallerContext
获取标头?
您可以使用来自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.