fix(server): protect accessLogMiddleware and accessControl from concurrent writes
This commit is contained in:
parent
76257a7859
commit
f73a761632
@ -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")
|
||||
}
|
||||
}
|
||||
|
||||
@ -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 (速率限制)
|
||||
|
||||
@ -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 {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user