diff --git a/internal/server/lifecycle.go b/internal/server/lifecycle.go index 41b169b..8daab4b 100644 --- a/internal/server/lifecycle.go +++ b/internal/server/lifecycle.go @@ -42,8 +42,8 @@ func (s *Server) cleanupResources() { } // 关闭 AccessControl (释放 GeoIP 资源) - if s.accessControl != nil { - if err := s.accessControl.Close(); err != nil { + for _, ac := range s.accessControls { + if err := ac.Close(); err != nil { logging.Warn().Err(err).Msg("Failed to close AccessControl") } } diff --git a/internal/server/middleware_builder.go b/internal/server/middleware_builder.go index 19fe81d..b92c9ac 100644 --- a/internal/server/middleware_builder.go +++ b/internal/server/middleware_builder.go @@ -12,7 +12,6 @@ import ( "rua.plus/lolly/internal/config" "rua.plus/lolly/internal/lua" "rua.plus/lolly/internal/middleware" - "rua.plus/lolly/internal/middleware/accesslog" "rua.plus/lolly/internal/middleware/bodylimit" "rua.plus/lolly/internal/middleware/compression" "rua.plus/lolly/internal/middleware/errorintercept" @@ -40,7 +39,6 @@ func (s *Server) buildMiddlewareChain(serverCfg *config.ServerConfig) (*middlewa var middlewares []middleware.Middleware // 1. AccessLog (已集成) - s.accessLogMiddleware = accesslog.New(&s.config.Logging) middlewares = append(middlewares, s.accessLogMiddleware) // 2. Security: AccessControl (IP 访问控制) @@ -50,7 +48,10 @@ func (s *Server) buildMiddlewareChain(serverCfg *config.ServerConfig) (*middlewa return nil, fmt.Errorf("failed to create access control middleware: %w", err) } middlewares = append(middlewares, ac) + s.accessControlsMu.Lock() s.accessControl = ac + s.accessControls = append(s.accessControls, ac) + s.accessControlsMu.Unlock() } // 3. Security: RateLimiter (速率限制) diff --git a/internal/server/server.go b/internal/server/server.go index bfabb2b..8b62921 100644 --- a/internal/server/server.go +++ b/internal/server/server.go @@ -66,6 +66,8 @@ type Server struct { accessLogMiddleware *accesslog.AccessLog luaEngine *lua.LuaEngine accessControl *security.AccessControl + accessControls []*security.AccessControl + accessControlsMu sync.Mutex errorPageManager *handler.ErrorPageManager fileCache *cache.FileCache pool *GoroutinePool @@ -96,7 +98,11 @@ type Server struct { // 返回值: // - *Server: 创建的服务器实例 func New(cfg *config.Config) *Server { - return &Server{config: cfg} + s := &Server{config: cfg} + if cfg != nil { + s.accessLogMiddleware = accesslog.New(&cfg.Logging) + } + return s } func (s *Server) handleRegistrationError(source, path string, err error) error {