ASP.NET Core 中使用负责均衡时获取客户端 IP

栏目: ASP.NET · 发布时间: 6年前

内容简介:在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的真实 IP 。之前采用的方式是自己直接获取 X-Forwarded-For 请求头,代码如下:现在改用 asp.net core 内置的 Forwarded Headers Middleware 来实现。

在使用负载均衡的情况下,通过 context.Connection.RemoteIpAddress 获取到的是负载均衡的 IP 地址,需要通过 X-Forwarded-For 请求头才能获取到客户端的真实 IP 。

之前采用的方式是自己直接获取 X-Forwarded-For 请求头,代码如下:

public static class HttpContextExtensions
{
    public static string GetUserIp(this HttpContext context)
    {
        var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
        if (string.IsNullOrEmpty(ip))
        {
            ip = context.Connection.RemoteIpAddress?.ToString();
        }
        return GetSingleIP(ip);
    }

    private static string GetSingleIP(string ip)
    {
        if (!string.IsNullOrEmpty(ip))
        {
            var commaIndex = ip.LastIndexOf(",");
            if (commaIndex >= 0)
            {
                ip = ip.Substring(commaIndex + 1);
            }
        }
        return ip;
    }
}

现在改用 asp.net core 内置的 Forwarded Headers Middleware 来实现。

先在 Startup.ConfigureServices 中配置 ForwardedHeadersOptions ,对于获取客户端 IP 的场景只需要指定 ForwardedHeaders.XForwardedFor 。

services.Configure<ForwardedHeadersOptions>(options =>
{
    options.ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto;
    options.KnownNetworks.Clear();
    options.KnownProxies.Clear();
});

注:如果负载均衡不是在本机通过 Loopback 地址转发请求的,一定要加上 options.KnownNetworks.Clear 与 options.KnownProxies.Clear 。

然后在 Startup.Configure 中添加 Forwarded Headers 中间件。

app.UseForwardedHeaders()

这样就可以通过 RemoteIpAddress 获取客户端的真实  IP 地址了。

var ip = Request.HttpContext.Connection.RemoteIpAddress?.MapToIPv4().ToString();

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Software Design 中文版 01

Software Design 中文版 01

[日] 技术评论社 / 人民邮电出版社 / 2014-3 / 39.00

《Software Design》是日本主流的计算机技术读物,旨在帮助程序员更实时、深入地了解前沿技术,扩大视野,提升技能。内容涵盖多平台软件开发技巧、云技术应用、大数据分析、网络通信技术、深度互联时代下的移动开发、虚拟化、人工智能等最前沿实践性讲解。以人脑思维模式,激发计算机操控的无限可能;以软件开发技巧,挖掘系统与硬件的最大价值。 《Software Design 中文版 01》的主题为......一起来看看 《Software Design 中文版 01》 这本书的介绍吧!

在线进制转换器
在线进制转换器

各进制数互转换器

XML 在线格式化
XML 在线格式化

在线 XML 格式化压缩工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具