Ответ
В Go можно использовать несколько типов прокси-серверов:
- Reverse Proxy (обратный прокси) - встроен в
net/http/httputil:
proxy := httputil.NewSingleHostReverseProxy(targetURL)
http.ListenAndServe(":8080", proxy)
- Forward Proxy (прямой прокси) - можно реализовать через
http.Handler:
func handleHTTP(w http.ResponseWriter, r *http.Request) {
resp, _ := http.DefaultTransport.RoundTrip(r)
defer resp.Body.Close()
copyHeader(w.Header(), resp.Header)
w.WriteHeader(resp.StatusCode)
io.Copy(w, resp.Body)
}
- SOCKS5 Proxy - через пакет
golang.org/x/net/proxy:
dialer, _ := proxy.SOCKS5("tcp", "proxy:1080", nil, nil)
httpClient := &http.Client{Transport: &http.Transport{Dial: dialer.Dial}}
Также популярны готовые решения:
- Caddy (с reverse proxy)
- Traefik
- Nginx (через Go-обёртки)
Для сложных сценариев можно использовать gRPC-прокси или написать кастомный прокси на основе net.Conn.