移除不再使用的配置文件和信号处理模块,更新扩展名规则中的阈值注释以简化理解。

This commit is contained in:
wood chen 2025-03-22 19:35:07 +08:00
parent 11378a7e0c
commit a141672243
5 changed files with 19 additions and 74 deletions

View File

@ -1,27 +0,0 @@
{
"MAP": {
"/path1": {
"DefaultTarget": "https://path1.com/path/path/path",
"ExtensionMap": {
"jpg,png,avif": "https://path1-img.com/path/path/path",
"mp4,webm": "https://path1-video.com/path/path/path"
},
"SizeThreshold": 204800
},
"/path2": "https://path2.com",
"/path3": {
"DefaultTarget": "https://path3.com",
"SizeThreshold": 512000
}
},
"Compression": {
"Gzip": {
"Enabled": false,
"Level": 6
},
"Brotli": {
"Enabled": false,
"Level": 4
}
}
}

View File

@ -19,8 +19,8 @@ type PathConfig struct {
type ExtensionRule struct { type ExtensionRule struct {
Extensions []string // 支持的扩展名列表 Extensions []string // 支持的扩展名列表
Target string // 目标服务器 Target string // 目标服务器
SizeThreshold int64 // 最小文件大小阈值 SizeThreshold int64 // 最小阈值
MaxSize int64 // 最大文件大小阈值 MaxSize int64 // 最大阈值
} }
type CompressionConfig struct { type CompressionConfig struct {
@ -37,8 +37,8 @@ type CompressorConfig struct {
type ExtRuleConfig struct { type ExtRuleConfig struct {
Extensions string `json:"Extensions"` // 逗号分隔的扩展名 Extensions string `json:"Extensions"` // 逗号分隔的扩展名
Target string `json:"Target"` // 目标服务器 Target string `json:"Target"` // 目标服务器
SizeThreshold int64 `json:"SizeThreshold"` // 最小文件大小阈值 SizeThreshold int64 `json:"SizeThreshold"` // 最小阈值
MaxSize int64 `json:"MaxSize"` // 最大文件大小阈值 MaxSize int64 `json:"MaxSize"` // 最大阈值
} }
// 处理扩展名映射的方法 // 处理扩展名映射的方法

View File

@ -1,32 +0,0 @@
package utils
import (
"os"
"os/signal"
"sync"
"syscall"
)
func SetupCloseHandler(callback func()) {
c := make(chan os.Signal, 1)
done := make(chan bool, 1)
var once sync.Once
signal.Notify(c, os.Interrupt, syscall.SIGTERM)
go func() {
<-c
once.Do(func() {
callback()
done <- true
})
}()
go func() {
select {
case <-done:
os.Exit(0)
case <-c:
os.Exit(1)
}
}()
}

View File

@ -6,6 +6,7 @@ import (
"encoding/hex" "encoding/hex"
"fmt" "fmt"
"log" "log"
"math"
"net" "net"
"net/http" "net/http"
neturl "net/url" neturl "net/url"
@ -219,11 +220,12 @@ func GetTargetURL(client *http.Client, r *http.Request, pathConfig config.PathCo
ext = strings.ToLower(ext) ext = strings.ToLower(ext)
for _, rule := range pathConfig.ExtRules { for _, rule := range pathConfig.ExtRules {
// 处理阈值默认值 // 处理阈值默认值
if rule.SizeThreshold <= 0 { if rule.SizeThreshold < 0 {
rule.SizeThreshold = 500 * 1024 // 默认最小阈值 500KB rule.SizeThreshold = 0 // 默认不限制
} }
if rule.MaxSize <= 0 { if rule.MaxSize <= 0 {
rule.MaxSize = 10 * 1024 * 1024 // 默认最大阈值 10MB rule.MaxSize = math.MaxInt64 // 设置为最大值表示不限制
} }
// 检查是否包含通配符 // 检查是否包含通配符
@ -241,10 +243,9 @@ func GetTargetURL(client *http.Client, r *http.Request, pathConfig config.PathCo
// 如果没有找到匹配的具体扩展名规则,使用通配符规则 // 如果没有找到匹配的具体扩展名规则,使用通配符规则
if len(matchingRules) == 0 { if len(matchingRules) == 0 {
if len(wildcardRules) > 0 { if len(wildcardRules) > 0 {
log.Printf("[Route] %s -> 使用通配符规则 (扩展名: %s)", path, ext) log.Printf("[Route] %s -> 使用通配符规则", path)
matchingRules = wildcardRules matchingRules = wildcardRules
} else { } else {
log.Printf("[Route] %s -> %s (没有找到扩展名 %s 的规则)", path, targetBase, ext)
return targetBase, false return targetBase, false
} }
} }
@ -265,8 +266,11 @@ func GetTargetURL(client *http.Client, r *http.Request, pathConfig config.PathCo
rule := &matchingRules[i] rule := &matchingRules[i]
// 检查文件大小是否在阈值范围内 // 检查文件大小是否在阈值范围内
if contentLength > rule.SizeThreshold && contentLength <= rule.MaxSize { if contentLength >= rule.SizeThreshold && contentLength <= rule.MaxSize {
// 找到匹配的规则 // 找到匹配的规则
log.Printf("[Route] %s -> %s (文件大小: %s, 在区间 %s 到 %s 之间)",
path, rule.Target, FormatBytes(contentLength),
FormatBytes(rule.SizeThreshold), FormatBytes(rule.MaxSize))
bestRule = rule bestRule = rule
break break
} }

View File

@ -32,8 +32,8 @@ import {
interface ExtRuleConfig { interface ExtRuleConfig {
Extensions: string; // 逗号分隔的扩展名 Extensions: string; // 逗号分隔的扩展名
Target: string; // 目标服务器 Target: string; // 目标服务器
SizeThreshold: number; // 最小文件大小阈值(字节) SizeThreshold: number; // 最小阈值(字节)
MaxSize: number; // 最大文件大小阈值(字节) MaxSize: number; // 最大阈值(字节)
} }
interface PathMapping { interface PathMapping {
@ -610,7 +610,7 @@ export default function ConfigPage() {
if (maxSizeBytes > 0 && sizeThresholdBytes >= maxSizeBytes) { if (maxSizeBytes > 0 && sizeThresholdBytes >= maxSizeBytes) {
toast({ toast({
title: "错误", title: "错误",
description: "最大文件大小阈值必须大于最小文件大小阈值", description: "最大阈值必须大于最小阈值",
variant: "destructive", variant: "destructive",
}); });
return; return;
@ -981,7 +981,7 @@ export default function ConfigPage() {
</div> </div>
<div className="grid gap-4"> <div className="grid gap-4">
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="ruleSizeThreshold"></Label> <Label htmlFor="ruleSizeThreshold"></Label>
<div className="flex gap-2"> <div className="flex gap-2">
<Input <Input
id="ruleSizeThreshold" id="ruleSizeThreshold"
@ -1012,7 +1012,7 @@ export default function ConfigPage() {
</div> </div>
</div> </div>
<div className="grid gap-2"> <div className="grid gap-2">
<Label htmlFor="ruleMaxSize"></Label> <Label htmlFor="ruleMaxSize"></Label>
<div className="flex gap-2"> <div className="flex gap-2">
<Input <Input
id="ruleMaxSize" id="ruleMaxSize"