Browse Source

caddyhttp: Specify default access log for a server (fix #3185)

master
Matthew Holt 5 years ago
parent
commit
2acb208e32
No known key found for this signature in database GPG Key ID: 2A349DD577D586A5
  1. 20
      caddyconfig/httpcaddyfile/httptype.go
  2. 2
      caddyconfig/httpcaddyfile/tlsapp.go
  3. 7
      modules/caddyhttp/server.go

20
caddyconfig/httpcaddyfile/httptype.go

@ -319,11 +319,13 @@ func (ServerType) evaluateGlobalOptionsBlock(serverBlocks []serverBlock, options
} }
// hostsFromServerBlockKeys returns a list of all the non-empty hostnames // hostsFromServerBlockKeys returns a list of all the non-empty hostnames
// found in the keys of the server block sb. If sb has a key that omits // found in the keys of the server block sb, unless allowEmpty is true, in
// the hostname (i.e. is a catch-all/empty host), then the returned list // which case a key with no host (e.g. ":443") will be added to the list as
// is empty, because the server block effectively matches ALL hosts. // an empty string. Otherwise, if allowEmpty is false, and if sb has a key
// that omits the hostname (i.e. is a catch-all/empty host), then the returned
// list is empty, because the server block effectively matches ALL hosts.
// The list may not be in a consistent order. // The list may not be in a consistent order.
func (st *ServerType) hostsFromServerBlockKeys(sb caddyfile.ServerBlock) ([]string, error) { func (st *ServerType) hostsFromServerBlockKeys(sb caddyfile.ServerBlock, allowEmpty bool) ([]string, error) {
// first get each unique hostname // first get each unique hostname
hostMap := make(map[string]struct{}) hostMap := make(map[string]struct{})
for _, sblockKey := range sb.Keys { for _, sblockKey := range sb.Keys {
@ -332,7 +334,7 @@ func (st *ServerType) hostsFromServerBlockKeys(sb caddyfile.ServerBlock) ([]stri
return nil, fmt.Errorf("parsing server block key: %v", err) return nil, fmt.Errorf("parsing server block key: %v", err)
} }
addr = addr.Normalize() addr = addr.Normalize()
if addr.Host == "" { if addr.Host == "" && !allowEmpty {
// server block contains a key like ":443", i.e. the host portion // server block contains a key like ":443", i.e. the host portion
// is empty / catch-all, which means to match all hosts // is empty / catch-all, which means to match all hosts
return []string{}, nil return []string{}, nil
@ -408,7 +410,7 @@ func (st *ServerType) serversFromPairings(
return nil, fmt.Errorf("server block %v: compiling matcher sets: %v", sblock.block.Keys, err) return nil, fmt.Errorf("server block %v: compiling matcher sets: %v", sblock.block.Keys, err)
} }
hosts, err := st.hostsFromServerBlockKeys(sblock.block) hosts, err := st.hostsFromServerBlockKeys(sblock.block, false)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -488,14 +490,12 @@ func (st *ServerType) serversFromPairings(
LoggerNames: make(map[string]string), LoggerNames: make(map[string]string),
} }
} }
hosts, err := st.hostsFromServerBlockKeys(sblock.block) hosts, err := st.hostsFromServerBlockKeys(sblock.block, true)
if err != nil { if err != nil {
return nil, err return nil, err
} }
for _, h := range hosts { for _, h := range hosts {
if ncl.name != "" { srv.Logs.LoggerNames[h] = ncl.name
srv.Logs.LoggerNames[h] = ncl.name
}
} }
} }
} }

2
caddyconfig/httpcaddyfile/tlsapp.go

@ -82,7 +82,7 @@ func (st ServerType) buildTLSApp(
// get values that populate an automation policy for this block // get values that populate an automation policy for this block
var ap *caddytls.AutomationPolicy var ap *caddytls.AutomationPolicy
sblockHosts, err := st.hostsFromServerBlockKeys(sblock.block) sblockHosts, err := st.hostsFromServerBlockKeys(sblock.block, false)
if err != nil { if err != nil {
return nil, warnings, err return nil, warnings, err
} }

7
modules/caddyhttp/server.go

@ -172,7 +172,12 @@ func (s *Server) ServeHTTP(w http.ResponseWriter, r *http.Request) {
logger := accLog logger := accLog
if s.Logs != nil && s.Logs.LoggerNames != nil { if s.Logs != nil && s.Logs.LoggerNames != nil {
logger = logger.Named(s.Logs.LoggerNames[r.Host]) if loggerName, ok := s.Logs.LoggerNames[r.Host]; ok {
logger = logger.Named(loggerName)
} else {
// see if there's a default log name to attach to
logger = logger.Named(s.Logs.LoggerNames[""])
}
} }
log := logger.Info log := logger.Info

Loading…
Cancel
Save