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
