net/httphttputilflag
package main
import (
	"flag"
	"log"
	"net/http"
	"net/http/httputil"
)

接下来,我们定义一个结构体来表示反向代理服务器,并为其添加一个方法来处理传入的HTTP请求。

type ProxyServer struct {
	targetURL string
	proxy     *httputil.ReverseProxy
}
func (p *ProxyServer) handleRequest(w http.ResponseWriter, r *http.Request) {
	p.proxy.ServeHTTP(w, r)
}
handleRequestReverseProxyServeHTTP

接下来,我们需要编写一个函数来创建反向代理服务器实例。

func NewProxyServer(targetURL string) *ProxyServer {
	target, err := url.Parse(targetURL)
	if err != nil {
		log.Fatal("Error parsing target URL:", err)
	}
	proxy := httputil.NewSingleHostReverseProxy(target)
	return &ProxyServer{
		targetURL: targetURL,
		proxy:     proxy,
	}
}
NewProxyServerNewSingleHostReverseProxyProxyServer
main
func main() {
	targetURL := flag.String("target", "", "Target URL to proxy to")
	listenAddr := flag.String("addr", ":8080", "Address to listen on")
	flag.Parse()
	if *targetURL == "" {
		log.Fatal("No target URL specified")
	}
	proxy := NewProxyServer(*targetURL)
	log.Println("Proxying requests to:", *targetURL)
	log.Println("Listening on:", *listenAddr)
	http.HandleFunc("/", proxy.handleRequest)
	log.Fatal(http.ListenAndServe(*listenAddr, nil))
}
mainflag-target-addrhandleRequesthttp.ListenAndServe

现在,我们可以构建和运行我们的反向代理服务器了。

$ go build proxy.go
$ ./proxy -target http://example.com
http://example.com

通过使用Go语言,我们可以快速轻松地实现一个简单而高效的反向代理服务器。当然,这只是一个基础示例,您可以根据自己的需求进行扩展和定制。

您可能感兴趣的文章: