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();

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

查看所有标签

猜你喜欢:

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

MATLAB智能算法/科学与工程计算技术丛书

MATLAB智能算法/科学与工程计算技术丛书

编者:温正//孙华克 / 清华大学 / 2017-09-01 / 89.0

一起来看看 《MATLAB智能算法/科学与工程计算技术丛书》 这本书的介绍吧!

随机密码生成器
随机密码生成器

多种字符组合密码

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具