Какие знаешь прокси серверы

«Какие знаешь прокси серверы» — вопрос из категории Сети, который задают на 23% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

В Go можно использовать несколько типов прокси-серверов:

  1. Reverse Proxy (обратный прокси) - встроен в net/http/httputil:
proxy := httputil.NewSingleHostReverseProxy(targetURL)
http.ListenAndServe(":8080", proxy)
  1. 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)
}
  1. 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.