读取用户出口ip
web项目中读取用户的出口ip是个常见需求,切换到新的工程后发现读取不到了。。。
首先翻看了一下iris的api获取用户ip的方法是:
remoteAddr := ctx.Request().RemoteAddr
fmt.Println("----" + remoteAddr)
通过域名访问我的工程,输出结果是
127.0.0.1:41550
官方提供的方法应该不会有错吧!那问题可能出现在了环境上。
通过ip访问我的工程,输出结果是
114.241.248.115:55735
百度搜索一下ip关键字,结果和工程中获取到的ip是一致的。
应该是环境影响了获取的方法。我的工程访问环境是这样的
域名 -->
web工程出现问题,我先从nginxi的日志下手,通过分析,nginx日志中的用户ip都能拿到。 那问题应该出现在了nginx转发。查了一下资料,发现nginx转发时可以把用户的ip转到header中 。
nginx配置文件中添加下面的代码
proxy_set_header X-real-ip $remote_addr;
解释一下 “$remote_addr” 是nginx中的变量,变量中存储的用户出口ip。我们这个值赋给http请求的header中的“X-real-ip”。这样我们就可以在代码中通过读取httpheader的方式拿到用户的ip了。
remoteAddr = ctx.Request().Header.Get("X-real-ip")
fmt.Println("用户ip====" + remoteAddr)
输出结果
用户ip====114.241.248.115