Files
demo/examples/wildcard_dns_proxy/main.go
2025-03-14 18:50:49 +00:00

48 lines
1.1 KiB
Go

package main
import (
"log"
"net/http"
"github.com/darkit/goproxy"
"github.com/darkit/goproxy/pkg/dns"
)
// WildcardDNSDelegate 通配符 DNS 代理委托
type WildcardDNSDelegate struct {
goproxy.DefaultDelegate
dnsResolver *dns.WildcardResolver
}
// ResolveBackend 解析后端服务器
func (d *WildcardDNSDelegate) ResolveBackend(req *http.Request) (string, error) {
return d.dnsResolver.Resolve(req.URL.Host)
}
func main() {
// 创建 DNS 解析器
resolver := dns.NewWildcardResolver(map[string]string{
"*.example.com": "http://backend.example.com",
"*.test.com": "http://backend.test.com",
})
// 创建通配符 DNS 代理委托
delegate := &WildcardDNSDelegate{
dnsResolver: resolver,
}
// 创建代理实例
proxy := goproxy.NewProxy(
goproxy.WithDelegate(delegate),
)
// 启动代理服务器
log.Println("通配符 DNS 代理服务器启动在 :8080")
log.Println("DNS 配置:")
log.Printf("- *.example.com -> backend.example.com\n")
log.Printf("- *.test.com -> backend.test.com\n")
if err := http.ListenAndServe(":8080", proxy); err != nil {
log.Fatalf("代理服务器启动失败: %v", err)
}
}