NetCore VUE 前后端分离获取IP

6 篇文章 0 订阅
2 篇文章 0 订阅

由于前后端分离项目,前端项目使用nginx部署,并且做了本机代理转发,访问服务地址配置均为localhost(项目都在同一服务器上),如下图:

 

 导致获取的IP地址均为127.0.0.1等本机IP,修改nginx配置文件,如下:

location / {
        proxy_pass http://localhost:5000;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

cmd管理员身份进入nginx目录,停止nginx,命令如下:

D:\nginx-1.21.5>nginx -s stop

重启nginx:

D:\nginx-1.21.5>start nginx

有时候nginx停止命令不能停止nginx,请使用资源管理器杀死进程(您有更好的方法可以留言给我,谢谢)。

写一个通用方法获取IP,代码如下:

/// <summary>
        /// 获取客户Ip
        /// </summary>
        /// <param name="context"></param>
        /// <returns></returns>
        static public string fnGetClientUserIp()
        {
            try
            {
                var userHostAddress = context.Request.Headers["X-Real-IP"].ToString();

                if (string.IsNullOrWhiteSpace(userHostAddress))
                {
                    userHostAddress = context.Request.Headers["X-Forwarded-For"].FirstOrDefault();
                }

                if (string.IsNullOrWhiteSpace(userHostAddress))
                {
                    userHostAddress = context.Connection.RemoteIpAddress.MapToIPv4()?.ToString();
                }

                if (string.IsNullOrWhiteSpace(userHostAddress))
                {
                    userHostAddress = context.Connection.RemoteIpAddress.ToString();//这个是直接IP,如果经过反向代理IP会变成代理机的,如果代理机就是本机就会变成127.0.0.1
                }

                if (!string.IsNullOrWhiteSpace(userHostAddress))
                {
                    return userHostAddress;
                }

                return "127.0.0.1";
            }
            catch(Exception ex)
            {
                return ":1";
            }
        }

示例:

string sIp = this.HttpContext.fnGetClientUserIp();

我的方法封装为HttpContext的扩展方法,修改方法名,代码如下:

/// <summary>
/// 获取客户Ip
/// </summary>
/// <param name="context"></param>
/// <returns></returns>

static public string fnGetClientUserIp(this HttpContext context)

如果上面代码段你定义为一个类内静态方法,调用方式如下:

string sIp = 你的Class类名.fnGetClientUserIp();

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值