The library user can define a maximum time to wait for the PROXY protocol header, before failing out to normal connection. We can assume that a proxy in front of the service will send the PROXY header immediatelly. This solves the issue of clients getting block when getting the RemoteAddr() for an incoming connection that does not send any data. That is the case of http.Serve on go < 1.6 as described in https://github.com/armon/go-proxyproto/issues/1
37 lines
1.2 KiB
Markdown
37 lines
1.2 KiB
Markdown
# proxyproto
|
|
|
|
This library provides the `proxyproto` package which can be used for servers
|
|
listening behind HAProxy of Amazon ELB load balancers. Those load balancers
|
|
support the use of a proxy protocol (http://haproxy.1wt.eu/download/1.5/doc/proxy-protocol.txt),
|
|
which provides a simple mechansim for the server to get the address of the client
|
|
instead of the load balancer.
|
|
|
|
This library provides both a net.Listener and net.Conn implementation that
|
|
can be used to handle situation in which you may be using the proxy protocol.
|
|
Only proxy protocol version 1, the human-readable form, is understood.
|
|
|
|
The only caveat is that we check for the "PROXY " prefix to determine if the protocol
|
|
is being used. If that string may occur as part of your input, then it is ambiguous
|
|
if the protocol is being used and you may have problems.
|
|
|
|
# Documentation
|
|
|
|
Full documentation can be found [here](http://godoc.org/github.com/armon/go-proxyproto).
|
|
|
|
# Examples
|
|
|
|
Using the library is very simple:
|
|
|
|
```
|
|
|
|
// Create a listener
|
|
list, err := net.Listen("tcp", "...")
|
|
|
|
// Wrap listener in a proxyproto listener
|
|
proxyList := &proxyproto.Listener{Listener: list}
|
|
conn, err :=proxyList.Accept()
|
|
|
|
...
|
|
```
|
|
|