Получить исходный IP-адрес от Go HTTP-сервера

Я пытаюсь реализовать HTTP-сервер в Голанге, который получает запросы от Amazon ELB, который использует прокси-протокол. Теперь я хотел бы знать, каков первоначальный IP-адрес, и поэтому я думал об использовании этого пакета.

Теперь, насколько я могу судить, этот пакет передает необработанный HTTP, но мой сервер реализует HTTP-сервер более высокого уровня с маршрутизатором.

У меня проблемы с переводом между ними. У меня такой вопрос: как я могу использовать эту библиотеку и по-прежнему использовать маршрутизатор, такой как gorilla/mux? Теперь в этом пакете нет ничего особенного, он просто говорит на более низком уровне, чем 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)
}

1 ответ

Обычный способ узнать фактический IP-адрес клиента по HTTP - использовать некоторые заголовки 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

Другие вопросы по тегам