我们很高兴地宣布 GHProxy v2.1.0 正式发布!这个版本带来了性能侧与用户侧的优化,主要更新如下:
CHANGLOG (更新日志)#
- CHANGE: 加入
FreeBSD
与Darwin
系统支持
- CHANGE: 更新安全政策, v1和24w版本序列生命周期正式结束
- ADD: 加入
timing
中间件记录响应时间
- ADD: 加入
loggin
中间件包装日志输出
- CHANGE: 更新logger版本至v1.3.0
- CHANGE: 改进日志相关
- ADD: 加入日志等级配置项
- CHANGE: 更新Go版本至1.23.6
- CHANGE: 更新Logger版本至v1.2.0
- CHANGE: 优化前端的连接转换逻辑
- CHANGE: 优化代码内不必要的函数化, 1.4之后, 函数化疑似有点太多了
- 优化
HTTP Client
参数
- CHANGE: 为api路由组增加no-cache标头
- CHANGE: 优化响应体分块复制实现
- ADD: 加入缓存池
- CHANGE: 改进缓存实现
- CHANGE: 部分杂项改进
- CHANGE: 优化GitReq的
HTTP Client
参数, 使其更符合本项目使用场景
- CHANGE: 优化Matches
- REMOVE: 移除Caddyfile残留
- REMOVE: 由于v2改进后稳定性增强, 故移除健康检测
- CHANGE: 优化
HTTP Client
参数, 使其更符合本项目使用场景
- CHANGE: 为
HTTP Client
增加复用, 对性能有所优化
- CHANGE: 由于用户使用了不符合
RFC 9113
规范的请求头, 导致ghproxy
无法正常工作, 在此版本为用户的错误行为提供补丁;
- FIX: 修复Docker启动脚本存在的一些问题
项目地址
Demo
TG讨论群组
前端界面:

主要更新#
性能优化#
我们在v2.1.0版本中对项目的性能进行了优化,主要优化点如下:
- 优化
HTTP Client
参数, 使其更符合本项目使用场景
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
func initChunkedHTTPClient() {
ctr = &http.Transport{
MaxIdleConns: 100,
MaxConnsPerHost: 60,
IdleConnTimeout: 20 * time.Second,
TLSHandshakeTimeout: 10 * time.Second,
ExpectContinueTimeout: 1 * time.Second,
ResponseHeaderTimeout: 10 * time.Second,
DialContext: (&net.Dialer{
Timeout: 30 * time.Second,
KeepAlive: 30 * time.Second,
}).DialContext,
}
cclient = &http.Client{
Transport: ctr,
}
}
|
- 使用
io.CopyBuffer
而非io.Copy
进行响应体分块复制, 同时使用缓存池对缓存进行复用, 减少内存占用
1
2
3
4
5
6
|
// 初始化缓存池
BufferPool = &sync.Pool{
New: func() interface{} {
return make([]byte, BufferSize)
},
}
|
1
2
3
4
5
6
7
8
9
10
11
|
// 从缓存池内取出缓存块
buffer := BufferPool.Get().([]byte)
defer BufferPool.Put(buffer)
_, err = io.CopyBuffer(c.Writer, resp.Body, buffer)
if err != nil {
logError("%s %s %s %s %s Failed to copy response body: %v", c.ClientIP(), method, u, c.Request.Header.Get("User-Agent"), c.Request.Proto, err)
return
} else {
c.Writer.Flush() // 确保刷入
}
|
前端优化#
对链接转换进行了一些优化
配置变动#
在v2.1.0版本中, 加入了日志等级配置项, 可根据需求调整日志输出等级。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
[server]
host = "0.0.0.0" # 监听地址
port = 8080 # 监听端口
sizeLimit = 125 # 125MB
bufferSize = 4096 # Bytes 缓冲区大小
enableH2C = "on" # 是否开启H2C传输(latest和dev版本请开启) on/off
[pages]
enabled = false # 是否开启内置静态页面(Docker版本请关闭此项)
staticPath = "/data/www" # 静态页面文件路径
[log]
logFilePath = "/data/ghproxy/log/ghproxy.log" # 日志文件路径
maxLogSize = 5 # MB 日志文件最大大小
level = "info" # dump, debug, info, warn, error, none 日志等级
[cors]
enabled = true # 是否开启跨域
[auth]
authMethod = "parameters" # 鉴权方式,支持parameters,header
authToken = "token" # 用户鉴权Token
enabled = false # 是否开启用户鉴权
[blacklist]
blacklistFile = "/data/ghproxy/config/blacklist.json" # 黑名单文件路径
enabled = false # 是否开启黑名单
[whitelist]
enabled = false # 是否开启白名单
whitelistFile = "/data/ghproxy/config/whitelist.json" # 白名单文件路径
[rateLimit]
enabled = false # 是否开启速率限制
rateMrthod = "total" # "ip" or "total" 速率限制方式
ratePerMinute = 180 # 每分钟限制请求数量
burst = 5 # 突发请求数量
|
后续版本更新相关#
25w13a#
- PRE-RELEASE: 此版本是v2.2.0的预发布版本,请勿在生产环境中使用;
- ADD: 加入
Socks5
和HTTP(S)
出站支持
- CHANGE: 配置新增
Outbound
配置块
感谢lfhy的PR: https://github.com/WJQSERVER-STUDIO/ghproxy/pull/46
GHProxy v2.1.0 是一个新的阶段, 性能优化的同时也引入了新的功能特性; 这个版本将v2带向了稳定, v2仍在持续迭代中, 我们会不断优化, 让它更加完善。
我们感谢所有用户的支持与反馈,并期待 GhProxy v2.1.0 能为您的开发工作带来更大的便利和效率!若此项目对您有所帮助,请不要忘记 star 本项目,您的支持是我们前进的动力!