网站首页> 文章专栏> 关于.net core使用nginx做反向代理获取客户端ip的问题
关于.net core使用nginx做反向代理获取客户端ip的问题
日期:2020-08-25 22:43:49 作者:一只小菜鸟都被占了 来源: 博客园 浏览量:3014

1、正常情况下.net core获取客户端ip是比较简单的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
/// <summary>
/// 获取客户Ip
/// </summary>
/// <param name = "context" ></ param >
/// < returns ></ returns >
public static string GetClientUserIp(this HttpContext context)
{
    var ip = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
    if (string.IsNullOrEmpty(ip))
    {
        ip = context.Connection.RemoteIpAddress.ToString();
    }
 
    return ip;
}   

  通过这样一个方法就能获取到客户端ip。

2、但是,我在centos下使用nginx代理后,这样指向的就是本地ip了,所以需要将nginx获取到的ip传递到.net core web站点。

3、首先,我们需要在Startup.cs里添加

app.UseForwardedHeaders(new ForwardedHeadersOptions
            {
                ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto
            });

然后

server {
    listen 80;
    location / {
        proxy_pass http://localhost:5000; proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection keep-alive;
        proxy_set_header Host $host;
        proxy_cache_bypass $http_upgrade;
    }
}

这是之前nginx配置。

需要再加上一行

proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;

最后重启nginx,至此可以获取到客户端ip啦。

来说两句吧
最新评论
    热门文章
      随便看看