diff --git a/.gitignore b/.gitignore index 9033da3..914d6e6 100644 --- a/.gitignore +++ b/.gitignore @@ -33,7 +33,6 @@ data/metrics/metrics.json data/metrics/path_stats.json data/metrics/referer_stats.json data/metrics/status_codes.json -data/config.example.json data/config.json .env data/cache diff --git a/data/config.example.json b/data/config.example.json new file mode 100644 index 0000000..e780c8e --- /dev/null +++ b/data/config.example.json @@ -0,0 +1,61 @@ +{ + "MAP": { + "/path1": { + "DefaultTarget": "https://path1.com/path/path/path", + "ExtensionMap": [ + { + "Extensions": "jpg,png,avif", + "Target": "https://path1-img.com/path/path/path", + "SizeThreshold": 204800, + "MaxSize": 5242880 + }, + { + "Extensions": "mp4,webm", + "Target": "https://path1-video.com/path/path/path", + "SizeThreshold": 204800, + "MaxSize": 5242880 + }, + { + "Extensions": "*", + "Target": "https://path1-wildcard.com/path/path/path", + "SizeThreshold": 204800, + "MaxSize": 5242880 + } + ] + }, + "/path2": "https://path2.com", + "/path3": { + "DefaultTarget": "https://path3.com", + "ExtensionMap": [ + { + "Extensions": "*", + "Target": "https://path3-wildcard.com", + "SizeThreshold": 512000, + "MaxSize": 10485760 + } + ], + "SizeThreshold": 512000 + }, + "/wildcard-no-limits": { + "DefaultTarget": "https://default.example.com", + "ExtensionMap": [ + { + "Extensions": "*", + "Target": "https://unlimited.example.com", + "SizeThreshold": 0, + "MaxSize": 0 + } + ] + } + }, + "Compression": { + "Gzip": { + "Enabled": false, + "Level": 6 + }, + "Brotli": { + "Enabled": false, + "Level": 4 + } + } +} \ No newline at end of file diff --git a/internal/config/config.go b/internal/config/config.go index ac0fecf..5057d4c 100644 --- a/internal/config/config.go +++ b/internal/config/config.go @@ -41,8 +41,9 @@ func NewConfigManager(configPath string) (*ConfigManager, error) { } // 确保所有路径配置的扩展名规则都已更新 - for _, pathConfig := range config.MAP { - pathConfig.ProcessExtensionMap() + for path, pc := range config.MAP { + pc.ProcessExtensionMap() + config.MAP[path] = pc // 更新回原始map } cm.config.Store(config) @@ -131,8 +132,9 @@ func RegisterUpdateCallback(callback func(*Config)) { // TriggerCallbacks 触发所有回调 func TriggerCallbacks(cfg *Config) { // 确保所有路径配置的扩展名规则都已更新 - for _, pathConfig := range cfg.MAP { - pathConfig.ProcessExtensionMap() + for path, pc := range cfg.MAP { + pc.ProcessExtensionMap() + cfg.MAP[path] = pc // 更新回原始map } callbackMutex.RLock() @@ -151,8 +153,9 @@ func (c *configImpl) Update(newConfig *Config) { defer c.Unlock() // 确保所有路径配置的扩展名规则都已更新 - for _, pathConfig := range newConfig.MAP { - pathConfig.ProcessExtensionMap() + for path, pc := range newConfig.MAP { + pc.ProcessExtensionMap() + newConfig.MAP[path] = pc // 更新回原始map } // 更新配置 @@ -191,8 +194,9 @@ func (cm *ConfigManager) loadConfig() error { } // 确保所有路径配置的扩展名规则都已更新 - for _, pathConfig := range config.MAP { - pathConfig.ProcessExtensionMap() + for path, pc := range config.MAP { + pc.ProcessExtensionMap() + config.MAP[path] = pc // 更新回原始map } cm.config.Store(config) diff --git a/internal/handler/proxy.go b/internal/handler/proxy.go index 3573235..6e468ca 100644 --- a/internal/handler/proxy.go +++ b/internal/handler/proxy.go @@ -179,11 +179,7 @@ func NewProxyHandler(cfg *config.Config) *ProxyHandler { // 注册配置更新回调 config.RegisterUpdateCallback(func(newCfg *config.Config) { - // 确保所有路径配置的processedExtMap都已更新 - for _, pathConfig := range newCfg.MAP { - pathConfig.ProcessExtensionMap() - } - + // 注意:config包已经在回调触发前处理了所有ExtRules,这里无需再次处理 handler.pathMap = newCfg.MAP handler.prefixTree.update(newCfg.MAP) // 更新前缀匹配树 handler.config = newCfg