增加:
1. ✅ 监控指标收集 2. ✅ 中间件机制 3. ✅ 配置热更新 4. ✅ 优雅关闭 5. ✅ 插件系统 6. ✅ API文档 7. ✅ 认证授权系统 8. ✅ 请求/响应压缩优化
This commit is contained in:
@@ -11,8 +11,9 @@ import (
|
||||
"time"
|
||||
|
||||
"github.com/darkit/goproxy/internal/config"
|
||||
"github.com/darkit/goproxy/internal/metrics"
|
||||
"github.com/darkit/goproxy/internal/proxy"
|
||||
"github.com/darkit/goproxy/internal/reverse"
|
||||
"github.com/darkit/goproxy/internal/rule"
|
||||
)
|
||||
|
||||
var (
|
||||
@@ -57,49 +58,46 @@ func main() {
|
||||
cfg.EnableCORS = *enableCORS
|
||||
cfg.ReverseProxyRulesFile = *routeFile
|
||||
|
||||
// 创建选项
|
||||
opts := &proxy.Options{
|
||||
Config: cfg,
|
||||
}
|
||||
// 创建反向代理配置
|
||||
reverseCfg := reverse.DefaultConfig()
|
||||
reverseCfg.ListenAddr = *addr
|
||||
reverseCfg.BaseConfig.EnableCompression = *enableCompression
|
||||
reverseCfg.BaseConfig.EnableCORS = *enableCORS
|
||||
reverseCfg.BaseConfig.AddXForwardedFor = *addXForwardedFor
|
||||
reverseCfg.BaseConfig.AddXRealIP = *addXRealIP
|
||||
|
||||
// 创建监控
|
||||
if *enableMetrics {
|
||||
m := metrics.NewSimpleMetrics()
|
||||
opts.Metrics = m
|
||||
|
||||
// 启动监控服务器
|
||||
go func() {
|
||||
mux := http.NewServeMux()
|
||||
handler := m.GetHandler()
|
||||
mux.Handle("/metrics", handler)
|
||||
log.Printf("监控服务器启动在 %s\n", *metricsAddr)
|
||||
if err := http.ListenAndServe(*metricsAddr, mux); err != nil {
|
||||
log.Fatalf("监控服务器启动失败: %v", err)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
// 创建自定义委托
|
||||
delegate := &ReverseProxyDelegate{
|
||||
backend: *backend,
|
||||
prefix: *pathPrefix,
|
||||
}
|
||||
opts.Delegate = delegate
|
||||
|
||||
// 创建代理
|
||||
p := proxy.New(opts)
|
||||
// 创建规则管理器
|
||||
ruleManager := rule.NewManager(nil)
|
||||
|
||||
// 如果有路径前缀,添加重写规则
|
||||
if *pathPrefix != "" {
|
||||
reverseProxy := p.NewReverseProxy()
|
||||
log.Printf("添加路径重写规则: 从请求路径移除前缀 %s\n", *pathPrefix)
|
||||
reverseProxy.AddRewriteRule(*pathPrefix, "", false)
|
||||
rewriteRule := &rule.RewriteRule{
|
||||
BaseRule: rule.BaseRule{
|
||||
ID: "path-prefix-rewrite",
|
||||
Type: rule.RuleTypeRewrite,
|
||||
Priority: 100,
|
||||
Pattern: *pathPrefix,
|
||||
MatchType: rule.MatchTypePath,
|
||||
Enabled: true,
|
||||
},
|
||||
Replacement: "",
|
||||
}
|
||||
if err := ruleManager.AddRule(rewriteRule); err != nil {
|
||||
log.Printf("添加重写规则失败: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
// 创建反向代理
|
||||
reverseProxy, err := reverse.New(reverseCfg)
|
||||
if err != nil {
|
||||
log.Fatalf("创建反向代理失败: %v", err)
|
||||
}
|
||||
|
||||
// 创建HTTP服务器
|
||||
server := &http.Server{
|
||||
Addr: *addr,
|
||||
Handler: p,
|
||||
Handler: reverseProxy,
|
||||
}
|
||||
|
||||
// 启动HTTP服务器
|
||||
|
Reference in New Issue
Block a user