package main import ( "fmt" "net/http" "os" ) var PROXY_HEADER string = os.Getenv("PROXY_HEADER") func respondWithIp(writer http.ResponseWriter, request *http.Request) { remote := request.RemoteAddr if PROXY_HEADER != "" { ipHeader := request.Header[PROXY_HEADER] if len(ipHeader) != 1 { fmt.Println("Error: Reading proxy header", PROXY_HEADER, "in request from", request.RemoteAddr, "got", ipHeader) writer.WriteHeader(http.StatusInternalServerError) fmt.Fprintf(writer, "Internal Server Error") return } remote = ipHeader[0] } fmt.Fprintf(writer, "%s\n", remote) } func main() { addr := ":8080" http.HandleFunc("/", respondWithIp) fmt.Println("Starting server on", addr) http.ListenAndServe(addr, nil) }