您的位置:首页 > 运维架构 > Nginx

go 通过nginx代理后获取用户ip

2014-08-14 00:00 288 查看
go 如果使用自己的服务器,可以直接使用 net/http 来获取

func ip(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.RemoteAddr)
}

另外,在net包中也有

func (c *IPConn) RemoteAddr() Addr

以上是获取用户的ip,是与用户直连的ip,如果走代理,会是代理的ip

如果通过nginx代理,上边方法获得的是nginx的服务器的ip,所以这里要设置nginx代理

proxy_set_header Remote_addr $remote_addr;


nginx会 转发ip到go的服务器,在通过go获取header中的romote_adder 获取用户的ip

func ip(w http.ResponseWriter, r *http.Request) {
fmt.Println(r.header.get("Romote_adder "))
}

nginx设置还可以设置X-Forward-For,这里没有测试,所以就没有贴出来,也是可以获取用户ip的,如果用户代理也是可以拿到真是ip的,通过header头获取虽然有可能被修改,但好像现在只有这几种方式,如果你有的方式,请回复出来,大家一起学习(x-forward-for的格式一般是:client_ip,proxy_ip,proxy_ip,...,所以,这样需要截取,如果用户没有走代理的话,这个会是空的)

兼容go服务器的获取

func ip(w http.ResponseWriter, r *http.Request) {
ip:=r.header.get("Romote_adder ")
if (ip=="") {
ip=r.RemoteAddr
}
fmt.Println(ip)
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: