繁体   English   中英

从Go HTTP Server获取源IP地址

[英]Get Source IP Address from Go HTTP Server

我正在尝试在Golang中实现一个HTTP服务器,该服务器从使用代理协议的Amazon ELB接收请求。 现在,我想知道原始IP地址是什么,因此我正在考虑使用软件包。

现在,据我所知, 程序包使用的是原始HTTP,但是我的服务器使用路由器实现了更高级别的HTTP服务器。

我在他们之间进行翻译时遇到麻烦。 我的问题是我该如何使用库并且仍使用大猩猩/多路复用器之类的路由器? 现在, 程序包没有什么特别的,它的讨论级别比HTTP低。

例:

// Listen on TCP port 2000 on all interfaces.
l, err := net.Listen("tcp", ":2000")
// proxyproxy is the library that maintains the source ip address for me
proxyList := &proxyproto.Listener{Listener: list}
if err != nil {
    log.Fatal(err)
}
defer proxyList.Close()

for {
    // Wait for a connection.
    conn, err := proxyList.Accept()
    if err != nil {
        log.Fatal(err)
    }
    // Handle the connection in a new goroutine.
    // The loop then returns to accepting, so that
    // multiple connections may be served concurrently.
    go func(c net.Conn) {

        // how do I connect my router

    }(conn)
}

通过HTTP查找实际客户端IP的通常方法是使用一些HTTP标头,例如:

  • X-Forwarded-For
  • X-Real-IP

实际上,Amazon ELB似乎支持X-Forwarded-For标头:

http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html

如果您使用的是Gorilla,那么他们的中间件似乎可以帮助您解决该问题:

https://godoc.org/github.com/gorilla/handlers#ProxyHeaders

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM