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

zggsdy · · 15496 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

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中的remote_adder 获取用户的ip

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

  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("Remote_addr")
    if (ip=="") {
       ip = r.RemoteAddr
    }
    fmt.Println(ip)
}



有疑问加站长微信联系(非本文作者)

本文来自:开源中国博客

感谢作者:zggsdy

查看原文:go 通过nginx代理后获取用户ip

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

15496 次点击  ∙  1 赞  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传