refactor(app): 改用 Servers[0] 替代旧版 Server 配置引用

将 cfg.Server 改为 cfg.Servers[0],适配多服务器配置格式。
HTTP/2、HTTP/3 等子模块配置同步更新。

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
xfy 2026-04-15 12:48:48 +08:00
parent 39371c7f06
commit 2bc13dd03b
3 changed files with 25 additions and 25 deletions

View File

@ -178,7 +178,7 @@ func (a *App) Run() int {
})
}
} else {
a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Server.Listen})
a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Servers[0].Listen})
}
// 创建 DNS 解析器(如果启用)
@ -243,7 +243,7 @@ func (a *App) Run() int {
}
// 创建并启动 HTTP/3 服务器(如果启用)
if a.cfg.HTTP3.Enabled && a.cfg.Server.SSL.Cert != "" {
if a.cfg.HTTP3.Enabled && a.cfg.Servers[0].SSL.Cert != "" {
tlsConfig, err := a.srv.GetTLSConfig()
if err != nil {
a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/3")
@ -263,21 +263,21 @@ func (a *App) Run() int {
}
// 创建并启动 HTTP/2 服务器(如果启用且配置了 TLS
if a.cfg.Server.SSL.HTTP2.Enabled && a.cfg.Server.SSL.Cert != "" {
if a.cfg.Servers[0].SSL.HTTP2.Enabled && a.cfg.Servers[0].SSL.Cert != "" {
tlsConfig, err := a.srv.GetTLSConfig()
if err != nil {
a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/2")
} else {
// 创建 HTTP/2 服务器,共享同一个 handler
a.http2Srv, err = http2.NewServer(&a.cfg.Server.SSL.HTTP2, a.srv.GetHandler(), tlsConfig)
a.http2Srv, err = http2.NewServer(&a.cfg.Servers[0].SSL.HTTP2, a.srv.GetHandler(), tlsConfig)
if err != nil {
a.logger.Error().Err(err).Msg("创建 HTTP/2 服务器失败")
} else {
go func() {
a.logger.LogStartup("HTTP/2 服务器启动中", map[string]string{
"listen": a.cfg.Server.Listen,
"max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Server.SSL.HTTP2.MaxConcurrentStreams),
"push_enabled": fmt.Sprintf("%t", a.cfg.Server.SSL.HTTP2.PushEnabled),
"listen": a.cfg.Servers[0].Listen,
"max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Servers[0].SSL.HTTP2.MaxConcurrentStreams),
"push_enabled": fmt.Sprintf("%t", a.cfg.Servers[0].SSL.HTTP2.PushEnabled),
})
// HTTP/2 服务器使用与主服务器相同的监听器
// 通过 ALPN 协商自动处理协议选择

View File

@ -246,7 +246,7 @@ func TestRun(t *testing.T) {
if err != nil {
t.Errorf("读取生成的配置文件失败: %v", err)
} else if !strings.Contains(string(data), "servers:") {
t.Errorf("生成的配置文件应包含 'server:', 实际内容: %s", string(data)[:100])
t.Errorf("生成的配置文件应包含 'servers:', 实际内容: %s", string(data)[:100])
}
}
})
@ -420,8 +420,8 @@ func TestHandleSignal_SIGHUP(t *testing.T) {
tmpDir := t.TempDir()
cfgPath := filepath.Join(tmpDir, "config.yaml")
cfgContent := `
server:
listen: ":8080"
servers:
- listen: ":8080"
logging:
error:
level: "info"
@ -525,8 +525,8 @@ func TestReloadConfig_Success(t *testing.T) {
tmpDir := t.TempDir()
cfgPath := filepath.Join(tmpDir, "config.yaml")
cfgContent := `
server:
listen: ":9090"
servers:
- listen: ":9090"
logging:
error:
level: "debug"
@ -691,8 +691,8 @@ func TestReloadConfig_WithValidConfig(t *testing.T) {
// 创建第一个配置
cfgPath1 := filepath.Join(tmpDir, "config1.yaml")
cfgContent1 := `
server:
listen: ":8080"
servers:
- listen: ":8080"
logging:
error:
level: "info"
@ -704,8 +704,8 @@ logging:
// 创建第二个配置
cfgPath2 := filepath.Join(tmpDir, "config2.yaml")
cfgContent2 := `
server:
listen: ":9090"
servers:
- listen: ":9090"
logging:
error:
level: "debug"
@ -741,8 +741,8 @@ func TestHandleSignal_AllSignals(t *testing.T) {
tmpDir := t.TempDir()
cfgPath := filepath.Join(tmpDir, "config.yaml")
cfgContent := `
server:
listen: ":8080"
servers:
- listen: ":8080"
logging:
error:
level: "info"

View File

@ -127,7 +127,7 @@ func (a *App) Run() int {
}
a.logger.LogStartup("配置加载成功", map[string]string{"config_path": a.cfgPath})
a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Server.Listen})
a.logger.LogStartup("监听地址", map[string]string{"listen": a.cfg.Servers[0].Listen})
if a.cfg.Resolver.Enabled {
a.resv = resolver.New(&a.cfg.Resolver)
@ -175,7 +175,7 @@ func (a *App) Run() int {
}
// HTTP/3 服务器
if a.cfg.HTTP3.Enabled && a.cfg.Server.SSL.Cert != "" {
if a.cfg.HTTP3.Enabled && a.cfg.Servers[0].SSL.Cert != "" {
tlsConfig, err := a.srv.GetTLSConfig()
if err != nil {
a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/3")
@ -195,20 +195,20 @@ func (a *App) Run() int {
}
// HTTP/2 服务器
if a.cfg.Server.SSL.HTTP2.Enabled && a.cfg.Server.SSL.Cert != "" {
if a.cfg.Servers[0].SSL.HTTP2.Enabled && a.cfg.Servers[0].SSL.Cert != "" {
tlsConfig, err := a.srv.GetTLSConfig()
if err != nil {
a.logger.Error().Err(err).Msg("获取 TLS 配置失败,跳过 HTTP/2")
} else {
a.http2Srv, err = http2.NewServer(&a.cfg.Server.SSL.HTTP2, a.srv.GetHandler(), tlsConfig)
a.http2Srv, err = http2.NewServer(&a.cfg.Servers[0].SSL.HTTP2, a.srv.GetHandler(), tlsConfig)
if err != nil {
a.logger.Error().Err(err).Msg("创建 HTTP/2 服务器失败")
} else {
go func() {
a.logger.LogStartup("HTTP/2 服务器启动中", map[string]string{
"listen": a.cfg.Server.Listen,
"max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Server.SSL.HTTP2.MaxConcurrentStreams),
"push_enabled": fmt.Sprintf("%t", a.cfg.Server.SSL.HTTP2.PushEnabled),
"listen": a.cfg.Servers[0].Listen,
"max_concurrent_streams": fmt.Sprintf("%d", a.cfg.Servers[0].SSL.HTTP2.MaxConcurrentStreams),
"push_enabled": fmt.Sprintf("%t", a.cfg.Servers[0].SSL.HTTP2.PushEnabled),
})
listeners := a.srv.GetListeners()
if len(listeners) > 0 {