package main import ( "fmt" "log" "net/http" "time" "github.com/darkit/goproxy" "github.com/darkit/goproxy/config" "github.com/darkit/goproxy/pkg/cache" "github.com/darkit/goproxy/pkg/healthcheck" "github.com/darkit/goproxy/pkg/loadbalance" "github.com/darkit/goproxy/pkg/metrics" ) func main() { // 创建基本配置 cfg := config.DefaultConfig() // 配置反向代理 cfg.ReverseProxy = true // 启用反向代理模式 cfg.ListenAddr = ":8080" // 监听地址 cfg.TargetAddr = "http://example.com" // 目标地址 cfg.PreserveClientIP = true // 保留客户端IP cfg.AddXForwardedFor = true // 添加X-Forwarded-For头 cfg.AddXRealIP = true // 添加X-Real-IP头 cfg.EnableCompression = true // 启用压缩 // 创建负载均衡器 // 根据linter错误,要检查正确的API backends := []string{ "http://server1:8080", "http://server2:8080", "http://server3:8080", } lb := loadbalance.NewRoundRobinBalancer() // 设置后端服务器列表 lb.AddList(backends, 1) // 健康检查配置 // 根据错误信息调整构造函数 healthCfg := &healthcheck.Config{ Interval: 10 * time.Second, Timeout: 3 * time.Second, MaxFails: 3, } // 假设NewHealthChecker只接受Config参数 healthChecker := healthcheck.NewHealthChecker(healthCfg) // 然后单独设置后端 healthChecker.AddTargetList(backends) // 创建缓存 // 根据错误信息修正参数 memCache := cache.NewMemoryCache(5*time.Minute, 30*time.Second, 1000) // 使用功能选项模式创建反向代理 proxy := goproxy.NewWithOptions( // 将配置对象传入 goproxy.WithConfig(cfg), // 性能优化 goproxy.WithConnectionPoolSize(100), goproxy.WithIdleTimeout(30*time.Second), goproxy.WithRequestTimeout(10*time.Second), // 负载均衡 goproxy.WithLoadBalancer(lb), // 健康检查 goproxy.WithHealthChecker(healthChecker), // 缓存 goproxy.WithHTTPCache(memCache), // 指标收集 goproxy.WithMetrics(metrics.NewSimpleMetrics()), // 重试策略 goproxy.WithEnableRetry(3, 1*time.Second, 10*time.Second), // DNS缓存 goproxy.WithDNSCacheTTL(5*time.Minute), // 启用CORS goproxy.WithEnableCORS(true), ) // 启动服务器 fmt.Println("反向代理启动在 :8080,转发到 http://example.com 并启用负载均衡") if err := http.ListenAndServe(":8080", proxy); err != nil { log.Fatalf("服务器启动失败: %v", err) } }