GHProxy v3 旨在提升性能, 同时修改过去遗留的问题
项目简介
基于Go的高性能,多功能,可扩展的Github代理
- ⚡ 基于 Go 语言实现,跨平台的同时提供高并发性能
- 🌐 使用字节旗下的 HertZ 作为 Web 框架
- 📡 使用 Touka-HTTPC 作为 HTTP 客户端
- 📥 支持 Git clone、raw、releases 等文件拉取
- 🎨 支持多个前端主题
- 🚫 支持自定义黑名单/白名单
- 🗄️ 支持 Git Clone 缓存(配合 Smart-Git)
- 🐳 支持 Docker 部署
- ⚡ 支持速率限制
- 🔒 支持用户鉴权
- 🐚 支持 shell 脚本嵌套加速
CHANGLOG (更新日志)
3.0.0 - 2025-04-04
- RELEASE: Next Gen; 下一个起点;
- CHANGE: 使用HertZ框架重构, 提升性能
- CHANGE: 前端在构建时加入, 新增
Design
,Metro
,Classic
主题 - CHANGE: 加入
Mino
主题对接选项 - FIX: 修正部分日志输出问题
- CHANGE: 移除gin残留
- CHANGE: 移除无用传入参数, 调整代码结构
- CHANGE: 改进cli
- CHANGE: 改进
脚本嵌套加速处理器
- CHANGE&FIX: 使用
c.SetBodyStream
方式, 修正此前chunked
传输中存在的诸多问题, 参看HertZ Issues #1309 - PORT: 从v2移植
matcher
相关改进 - CHANGE: 增加默认配置生成
- CHANGE: 优化前端资源加载
- CHANGE: 将
cfg
flag改为c
以符合POSIX
规范 - CHANGE: 为
smart-git
添加no-cache
标头
主要更新
更换HTTP框架
由Gin框架迁移到HertZ框架以提升高并发和密集数据流下的性能和效率
上图为HertZ, Gin, Fiber, FastHttp性能的对比
- 由图一可以看到HertZ在大部分情况下的QPS(每秒请求数)均有所领先
- 由图二图三可以看到TP999和TP99, HertZ在大部分情况下低于对手, 领先于对手
QPS为每秒请求数, 越高越好
TP999和TP99和1%lowFPS概念类似, TP99代表 99% 的 HTTP 请求的响应时间都小于TP99的值
前端改进
加入更多前端主题的同时, 将前端分离到单独仓库, 参看GHProxy前端仓库
Cli改进
|
|
-c
类型:string
默认值:/data/ghproxy/config/config.toml
示例:ghproxy -c /data/ghproxy/demo.toml
-cfg
已弃用, 被-c
替代-h
显示帮助信息-v
显示版本号
配置文件
config.toml
是 ghproxy
的主配置文件,采用 TOML 格式。您可以通过修改此文件来定制 ghproxy
的各项功能,例如服务器端口、连接设置、Git 克隆模式、日志级别、认证方式、黑白名单以及限速策略等。
以下是 config.toml
文件的详细配置项说明:
|
|
配置项详细说明
-
[server]
- 服务器配置host
: 监听地址。- 类型: 字符串 (
string
) - 默认值:
"0.0.0.0"
(监听所有) - 说明: 设置
ghproxy
监听的网络地址。通常设置为"0.0.0.0"
以监听所有可用的网络接口。
- 类型: 字符串 (
port
: 监听端口。- 类型: 整数 (
int
) - 默认值:
8080
- 说明: 设置
ghproxy
监听的端口号。
- 类型: 整数 (
sizeLimit
: 请求体大小限制。- 类型: 整数 (
int
) - 默认值:
125
(MB) - 说明: 限制允许接收的请求体最大大小,单位为 MB。用于防止过大的请求导致服务压力过大。
- 类型: 整数 (
H2C
: 是否启用 H2C (HTTP/2 Cleartext) 传输。- 类型: 布尔值 (
bool
) - 默认值:
true
(启用) - 说明: 启用后,允许客户端使用 HTTP/2 协议进行无加密传输,提升性能。
- 类型: 布尔值 (
cors
: CORS (跨域资源共享) 设置。- 类型: 字符串 (
string
) - 默认值:
"*"
(允许所有来源) - 可选值:
""
或"*"
: 允许所有来源跨域访问。"nil"
: 禁用 CORS。- 具体的域名: 例如
"https://example.com"
,只允许来自指定域名的跨域请求。
- 说明: 配置 CORS 策略,用于控制哪些域名可以跨域访问
ghproxy
服务。
- 类型: 字符串 (
debug
: 是否启用调试模式。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,
ghproxy
会输出更详细的日志信息,用于开发和调试。
- 类型: 布尔值 (
-
[httpc]
- HTTP 客户端配置mode
: HTTP 客户端模式。- 类型: 字符串 (
string
) - 默认值:
"auto"
(自动模式) - 可选值:
"auto"
: 自动模式,使用默认的 HTTP 客户端配置,适用于大多数场景。"advanced"
: 高级模式,允许自定义连接池参数,可以更精细地控制 HTTP 客户端的行为。
- 说明: 选择 HTTP 客户端的运行模式。
- 类型: 字符串 (
maxIdleConns
: 最大空闲连接数 (仅在高级模式下生效)。- 类型: 整数 (
int
) - 默认值:
100
- 说明: 设置 HTTP 客户端连接池中保持的最大空闲连接数。
- 类型: 整数 (
maxIdleConnsPerHost
: 每个主机最大空闲连接数 (仅在高级模式下生效)。- 类型: 整数 (
int
) - 默认值:
60
- 说明: 设置 HTTP 客户端连接池中,每个主机允许保持的最大空闲连接数。
- 类型: 整数 (
maxConnsPerHost
: 每个主机最大连接数 (仅在高级模式下生效)。- 类型: 整数 (
int
) - 默认值:
0
(不限制) - 说明: 设置 HTTP 客户端连接池中,每个主机允许建立的最大连接数。设置为
0
表示不限制。
- 类型: 整数 (
-
[gitclone]
- Git 克隆配置mode
: Git 克隆模式。- 类型: 字符串 (
string
) - 默认值:
"bypass"
(绕过模式) - 可选值:
"bypass"
: 绕过模式,直接克隆 GitHub 仓库,不使用任何缓存加速。"cache"
: 缓存模式,使用智能 Git 服务加速克隆,需要配置smartGitAddr
。
- 说明: 选择 Git 克隆的模式。
- 类型: 字符串 (
smartGitAddr
: 智能 Git 服务地址 (仅在缓存模式下生效)。- 类型: 字符串 (
string
) - 默认值:
"http://127.0.0.1:8080"
- 说明: 当
mode
设置为"cache"
时,需要配置智能 Git 服务的地址,用于加速 Git 克隆。
- 类型: 字符串 (
ForceH2C
: 是否强制使用 H2C 连接到智能 Git 服务。- 类型: 布尔值 (
bool
) - 默认值:
false
(不强制) - 说明: 如果智能 Git 服务支持 H2C,可以设置为
true
以强制使用 H2C 连接,提升性能。
- 类型: 布尔值 (
-
[shell]
- Shell 嵌套加速功能配置editor
: 是否启用编辑(嵌套加速)功能。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后, 会修改
.sh
文件内容以实现嵌套加速
- 类型: 布尔值 (
rewriteAPI
: 是否重写 API 地址。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,
ghproxy
会重写脚本内的Github API地址。
- 类型: 布尔值 (
-
[pages]
- Pages 服务配置mode
: Pages 服务模式。- 类型: 字符串 (
string
) - 默认值:
"internal"
(内置 Pages 服务) - 可选值:
"internal"
: 使用ghproxy
内置的 Pages 服务。"external"
: 使用外部 Pages 位置。
- 说明: 选择 Pages 服务的运行模式。
- 类型: 字符串 (
theme
: Pages 主题。- 类型: 字符串 (
string
) - 默认值:
"bootstrap"
- 可选值: 参看GHProxy项目前端仓库
- 说明: 设置内置 Pages 服务使用的主题。
- 类型: 字符串 (
staticDir
: 静态文件目录。- 类型: 字符串 (
string
) - 默认值:
"/data/www"
- 说明: 指定外置 Pages 服务使用的静态文件目录。
- 类型: 字符串 (
-
[log]
- 日志配置logFilePath
: 日志文件路径。- 类型: 字符串 (
string
) - 默认值:
"/data/ghproxy/log/ghproxy.log"
- 说明: 设置
ghproxy
日志文件的存储路径。
- 类型: 字符串 (
maxLogSize
: 最大日志文件大小。- 类型: 整数 (
int
) - 默认值:
5
(MB) - 说明: 设置单个日志文件的最大大小,单位为 MB。当日志文件大小超过此限制时,会进行日志轮转。
- 类型: 整数 (
level
: 日志级别。- 类型: 字符串 (
string
) - 默认值:
"info"
- 可选值:
"dump"
,"debug"
,"info"
,"warn"
,"error"
,"none"
- 说明: 设置日志输出的级别。级别越高,输出的日志信息越少。
"dump"
: 输出所有日志,包括最详细的调试信息。"debug"
: 输出调试信息、信息、警告和错误日志。"info"
: 输出信息、警告和错误日志。"warn"
: 输出警告和错误日志。"error"
: 仅输出错误日志。"none"
: 禁用所有日志输出。
- 类型: 字符串 (
-
[auth]
- 认证配置enabled
: 是否启用认证。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,需要提供正确的认证信息才能访问
ghproxy
服务。
- 类型: 布尔值 (
method
: 认证方法。- 类型: 字符串 (
string
) - 默认值:
"parameters"
(URL 参数) - 可选值:
"header"
或"parameters"
"header"
: 通过请求头GH-Auth
或自定义请求头 (通过key
配置) 传递认证 Token。"parameters"
: 通过 URL 参数auth_token
或自定义 URL 参数名 (通过Key
配置) 传递认证 Token。
- 说明: 选择认证信息传递的方式。
- 类型: 字符串 (
key
: 自定义认证 Key。- 类型: 字符串 (
string
) - 默认值:
""
(空字符串,使用默认的GH-Auth
请求头或auth_token
URL 参数名) - 说明: 可以自定义认证时使用的请求头名称或 URL 参数名。如果为空,则使用默认的
GH-Auth
请求头或auth_token
URL 参数名。
- 类型: 字符串 (
token
: 认证 Token。- 类型: 字符串 (
string
) - 默认值:
"token"
- 说明: 设置认证时需要提供的 Token 值。
- 类型: 字符串 (
passThrough
: 是否认证参数透穿到Github。- 类型: 布尔值 (
bool
) - 默认值:
false
(不允许) - 说明: 如果设置为
true
,相关参数会被透穿到Github。
- 类型: 布尔值 (
ForceAllowApi
: 是否强制允许 API 访问。- 类型: 布尔值 (
bool
) - 默认值:
false
(不强制允许) - 说明: 如果设置为
true
,则强制允许对 GitHub API 的访问,即使未启用认证或认证失败。
- 类型: 布尔值 (
-
[blacklist]
- 黑名单配置enabled
: 是否启用黑名单。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,
ghproxy
将根据blacklist.json
文件中的规则阻止对特定用户或仓库的访问。
- 类型: 布尔值 (
blacklistFile
: 黑名单文件路径。- 类型: 字符串 (
string
) - 默认值:
"/data/ghproxy/config/blacklist.json"
- 说明: 指定黑名单配置文件的路径。
- 类型: 字符串 (
-
[whitelist]
- 白名单配置enabled
: 是否启用白名单。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,
ghproxy
将只允许访问whitelist.json
文件中规则指定的用户或仓库。白名单的优先级高于黑名单。
- 类型: 布尔值 (
whitelistFile
: 白名单文件路径。- 类型: 字符串 (
string
) - 默认值:
"/data/ghproxy/config/whitelist.json"
- 说明: 指定白名单配置文件的路径。
- 类型: 字符串 (
-
[rateLimit]
- 限速配置enabled
: 是否启用限速。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,
ghproxy
将根据配置的策略限制请求速率,防止服务被滥用。
- 类型: 布尔值 (
rateMethod
: 限速方法。- 类型: 字符串 (
string
) - 默认值:
"total"
(全局限速) - 可选值:
"ip"
或"total"
"ip"
: 基于客户端 IP 地址进行限速,每个 IP 地址都有独立的速率限制。"total"
: 全局限速,所有客户端共享同一个速率限制。
- 说明: 选择限速的策略。
- 类型: 字符串 (
ratePerMinute
: 每分钟允许的请求数。- 类型: 整数 (
int
) - 默认值:
180
- 说明: 设置每分钟允许通过的最大请求数。
- 类型: 整数 (
burst
: 突发请求数。- 类型: 整数 (
int
) - 默认值:
5
- 说明: 允许在短时间内超过
ratePerMinute
的突发请求数。
- 类型: 整数 (
-
[outbound]
- 出站代理配置enabled
: 是否启用出站代理。- 类型: 布尔值 (
bool
) - 默认值:
false
(禁用) - 说明: 启用后,
ghproxy
将通过配置的代理服务器转发所有出站请求。
- 类型: 布尔值 (
url
: 出站代理 URL。- 类型: 字符串 (
string
) - 默认值:
"socks5://127.0.0.1:1080"
- 支持协议:
socks5://
和http://
- 说明: 设置出站代理服务器的 URL。支持 SOCKS5 和 HTTP 代理协议。
- 类型: 字符串 (
前端主题一览
Bootstrap
使用Bootstrap框架制作的前端页面, v2默认主题
许可证: WJQserver Studio License v2.0
Nebula
在 https://github.com/WJQSERVER-STUDIO/ghproxy/pull/49 加入的主题, 作者为 @liangshengmoran
许可证: MIT License
mino
作者为 @admin8800
许可证: MIT License Copyright (c) admin8800
Design
在v3加入的新主题
许可证: WJQserver Studio License v2.0
Classic
来自GHProxy v1阶段的前端页面, 回味项目起点
许可证: WJQserver Studio License v2.0
Metro
磁贴风格
许可证: WJQserver Studio License v2.0
结语
我们感谢所有用户的支持与反馈,并期待 GhProxy v3 能为您带来更大的便利和效率!若此项目对您有所帮助,请不要忘记 star 本项目,您的支持是我们前进的动力!