c#如何获取ngnix代理后的真实IP,通过Nginx代理后获取真实IP
需要在nginx中配置协议头
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $remote_addr;
在asp.net端通过一下代码实现
public static string GetIPAddress(bool outxy) { string user_IP = ""; string xy = ""; if (System.Web.HttpContext.Current != null && System.Web.HttpContext.Current.Request != null) { if (System.Web.HttpContext.Current.Request.Headers["X-Real-IP"] != null) { user_IP = System.Web.HttpContext.Current.Request.Headers["X-Real-IP"].ToString(); xy = "HX-Real-IP"; } if ((string.IsNullOrEmpty(user_IP) || "unknown".Equals(user_IP)) && System.Web.HttpContext.Current.Request.Headers["X-Forwarded-For"] != null) { user_IP = System.Web.HttpContext.Current.Request.Headers["X-Forwarded-For"].ToString(); xy = "HX-Forwarded-For"; } if ((string.IsNullOrEmpty(user_IP) || "unknown".Equals(user_IP) ) && System.Web.HttpContext.Current.Request.ServerVariables["X-Real-IP"] != null) { xy = "SX-Real-IP"; user_IP = System.Web.HttpContext.Current.Request.ServerVariables["X-Real-IP"].ToString(); } if ((string.IsNullOrEmpty(user_IP) || "unknown".Equals(user_IP)) && System.Web.HttpContext.Current.Request.ServerVariables["X_FORWARDED_FOR"] != null) { user_IP = System.Web.HttpContext.Current.Request.ServerVariables["X_FORWARDED_FOR"].ToString(); xy = "SX_FORWARDED_FOR"; } if ((string.IsNullOrEmpty(user_IP) || "unknown".Equals(user_IP))) { if (System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"] != null) { user_IP = System.Web.HttpContext.Current.Request.ServerVariables["HTTP_X_FORWARDED_FOR"].ToString(); xy = "SHTTP_X_FORWARDED_FOR"; } } if (string.IsNullOrEmpty(user_IP)) { if (System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"] != null) { user_IP = System.Web.HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"].ToString(); xy = "SREMOTE_ADDR"; } } if (string.IsNullOrEmpty(user_IP) == false) { user_IP = user_IP.Trim(); if (user_IP.Contains(' ')) user_IP = user_IP.Split(' ')[0]; if (user_IP.Contains(',')) user_IP = user_IP.Split(',')[0]; if (user_IP.IndexOf('.') > 0) { StringBuilder uu = new StringBuilder(); foreach (char c in user_IP) { if (Convert.ToInt32(c) >= 48 && Convert.ToInt32(c) <= 57) { uu.Append(c); } else if (c == '.') { uu.Append(c); } else { break; } } user_IP = uu.ToString(); } } if (!string.IsNullOrEmpty(user_IP)) { if (user_IP.Contains("\u0000")) { user_IP = user_IP.Replace("\u0000", ""); } } else { user_IP = System.Web.HttpContext.Current.Request.UserHostAddress; xy = "UserHostAddress"; } if (outxy) return user_IP + "," + xy; return user_IP; } return ""; }
这样优先获取 X-Real-IP