1. 首页 >后端开发 >C#,Net >

c# asp.net获取nginx代理后的真实IP地址

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