1.  监控指标收集
2.  中间件机制
3.  配置热更新
4.  优雅关闭
5.  插件系统
6.  API文档
7.  认证授权系统
8.  请求/响应压缩优化
This commit is contained in:
2025-03-13 22:58:39 +08:00
parent 35f492b1c5
commit 7efc72b362
16 changed files with 1718 additions and 51 deletions

View File

@@ -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服务器