httputil.ReverseProxy перенаправляет запросы на другой сервер. NewSingleHostReverseProxy(url) создает прокси к одному бэкенду. В Director меняют Host, Scheme, путь. Используют для балансировки, скрытия бэкендов, добавления заголовков. Для нескольких бэкендов свой Director с выбором по правилу (round-robin, sticky).
target, _ := url.Parse("http://backend:8080")
proxy := httputil.NewSingleHostReverseProxy(target)
proxy.Director = func(r *http.Request) {
r.URL.Scheme = target.Scheme
r.URL.Host = target.Host
r.Host = target.Host
}
http.ListenAndServe(":80", proxy)