- 一般情况下.NetCore获取客户端IP是比较简单的,通过下面的这段代码就能获取到客户端的IP地址
public static string GetRealIP(this HttpContext context)
{
var context = HttpContext.Current;
if (context == null) return "";
var result = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
if (string.IsNullOrEmpty(result))
{
result = context.Connection.RemoteIpAddress.ToString();
}
return result;
}
-
但是有时候在用nginx做.NetCore的反向代理后,这样指向的就是本地的IP了,所以需要将nginx获取到的ip传递到.NetCore web站点中。
-
首先我们需要在Startup.cs中添加
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
app.UseForwardedHeaders(new ForwardedHeadersOptions
{
ForwardedHeaders = Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedFor | Microsoft.AspNetCore.HttpOverrides.ForwardedHeaders.XForwardedProto
});
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
- 然后在nginx中添加一行配置,之后重新加载nginx配置文件就ok了
# 后端的Web服务器可以通过X-Forwarded-For获取用户真实IP
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;