1、正常情況下.net core獲取客戶端ip是比較簡單的
/// <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啦。
