diff --git a/internal/app/app.go b/internal/app/app.go index e5117b4..8bc2e60 100644 --- a/internal/app/app.go +++ b/internal/app/app.go @@ -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 协商自动处理协议选择 diff --git a/internal/app/app_test.go b/internal/app/app_test.go index 67a7bfe..c673f2b 100644 --- a/internal/app/app_test.go +++ b/internal/app/app_test.go @@ -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" diff --git a/internal/app/app_windows.go b/internal/app/app_windows.go index 740a924..c4f50b6 100644 --- a/internal/app/app_windows.go +++ b/internal/app/app_windows.go @@ -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 {