diff --git a/CHANGELOG.md b/CHANGELOG.md index 9f129a8..e6236a7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,11 @@ # 更新日志 +24w18b +--- +- PRE-RELEASE: 此版本是预发布版本,请勿在生产环境中使用 +- CHANGE: 经团队考量,移除 Docker 代理功能,若造成了不便敬请谅解 +- CHANGE: 修改日志检查周期 + 24w18a --- - PRE-RELEASE: 此版本是预发布版本,请勿在生产环境中使用 diff --git a/DEV-VERSION b/DEV-VERSION index e99003d..4730c0a 100644 --- a/DEV-VERSION +++ b/DEV-VERSION @@ -1 +1 @@ -24w18a \ No newline at end of file +24w18b \ No newline at end of file diff --git a/caddyfile/dev/Caddyfile b/caddyfile/dev/Caddyfile index 6b6eab1..d4a1f98 100644 --- a/caddyfile/dev/Caddyfile +++ b/caddyfile/dev/Caddyfile @@ -88,44 +88,11 @@ file_server import cache 0s 24h } - handle_errors { - @redirects `{err.status_code} in [301, 302, 307]` - reverse_proxy @redirects { - header_up Location {http.response.header.Location} - } - } - route /v2* { - reverse_proxy https://registry-1.docker.io { - header_up Host {reverse_proxy.upstream.hostport} - header_up X-Real-IP {remote} - header_up X-Forwarded-For {http.request.header.X-Forwarded-For} - header_up X-Forwarded-Proto {scheme} - header_up Authorization {http.request.header.Authorization} - header_down WWW-Authenticate "https://auth.docker.io" "https://{host}" - header_down Location "https://production.cloudflare.docker.com" "https://{host}" - } - } - - route /token* { - reverse_proxy https://auth.docker.io { - header_up Host {reverse_proxy.upstream.hostport} - header_up X-Real-IP {remote} - header_up X-Forwarded-For {http.request.header.X-Forwarded-For} - header_up X-Forwarded-Proto {scheme} - header_up Authorization {http.request.header.Authorization} - } - } - - route /registry-v2* { - reverse_proxy https://production.cloudflare.docker.com { - header_up Host {reverse_proxy.upstream.hostport} - header_up X-Real-IP {remote} - header_up X-Forwarded-For {http.request.header.X-Forwarded-For} - header_up X-Forwarded-Proto {scheme} - header_up Authorization {http.request.header.Authorization} - } - } + route /api* { + rate_limit 15r/m 10000 429 + import cache 0s 6h + } } import /data/caddy/config.d/* diff --git a/logger/logger.go b/logger/logger.go index 09d262f..e5e5b75 100644 --- a/logger/logger.go +++ b/logger/logger.go @@ -18,11 +18,11 @@ var ( logger *log.Logger logChannel = make(chan string, 100) quitChannel = make(chan struct{}) - logFileMutex sync.Mutex // 保护 logFile 的互斥锁 + logFileMutex sync.Mutex logFilePath = "/data/ghproxy/log/ghproxy.log" ) -// Init 初始化日志记录器,接受日志文件路径作为参数 +// 初始化,接受日志文件路径作为参数 func Init(logFilePath_input string, maxLogsize int) error { logFileMutex.Lock() defer logFileMutex.Unlock() @@ -40,7 +40,6 @@ func Init(logFilePath_input string, maxLogsize int) error { return nil } -// logWorker 处理日志记录 func logWorker() { for { select { @@ -53,38 +52,37 @@ func logWorker() { } } -// Log 直接记录日志的函数 func Log(customMessage string) { logChannel <- customMessage } -// Logw 用于格式化日志记录 +// 格式化日志记录 func Logw(format string, args ...interface{}) { message := fmt.Sprintf(format, args...) Log(message) } -// 日志等级INFO +// INFO func LogInfo(format string, args ...interface{}) { message := fmt.Sprintf(format, args...) output := fmt.Sprintf("[INFO] %s", message) Log(output) } -// 日志等级WARNING +// WARNING func LogWarning(format string, args ...interface{}) { message := fmt.Sprintf(format, args...) output := fmt.Sprintf("[WARNING] %s", message) Log(output) } -// 日志等级ERROR +// ERROR func LogError(format string, args ...interface{}) { message := fmt.Sprintf(format, args...) Log(message) } -// Close 关闭日志文件 +// 关闭日志文件 func Close() { logFileMutex.Lock() defer logFileMutex.Unlock() @@ -100,7 +98,7 @@ func Close() { func monitorLogSize(logFilePath string, maxLogsize int) { var maxLogsizeBytes int64 = int64(maxLogsize) * 1024 * 1024 // 最大日志文件大小,单位为MB for { - time.Sleep(600 * time.Second) // 每10分钟检查一次 + time.Sleep(120 * time.Minute) // 每120分钟检查一次日志文件大小 logFileMutex.Lock() info, err := logFile.Stat() logFileMutex.Unlock() diff --git a/proxy/proxy.go b/proxy/proxy.go index 76e62b6..1bd1599 100644 --- a/proxy/proxy.go +++ b/proxy/proxy.go @@ -155,7 +155,7 @@ func createHTTPClient(mode string) *req.Client { client := req.C() switch mode { case "chrome": - client.SetUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/128.0.0.0 Safari/537.36"). + client.SetUserAgent("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/129.0.0.0 Safari/537.36"). SetTLSFingerprintChrome(). ImpersonateChrome() case "git":