gin获取客户端真实IP方法如下

1
2
3
4
5
6
7
8
9
10
11
12
13
func xx(c *gin.Context){
// 获取客户端真实ip地址
ip := c.ClientIP()
}

func main() {
r := gin.Default()
// 如果应用程序不在代理之后,“ForwardedByClientIP”应设置为 false,因此“X-Forwarded-For”将被忽略。
// 如果在代理后面将其设置为true
r.ForwardedByClientIP = true

r.Run(":18888")
}

当使用Nginx为Golang gin程序做反向代理(端口转发)或负载均衡时,gin得到的客户端IP为127.0.0.1,这是由于Nginx没有正确配置导致;

解决方法

在Nginx配置中设置两个HTTP Header,X-Real-IPX-Forward-For

1
2
3
4
5
location / {
proxy_pass http://127.0.0.1:18888;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forward-For $remote_addr;
}