summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--caddyconfig/httpcaddyfile/httptype.go23
-rw-r--r--caddytest/integration/caddyfile_adapt/log_except_catchall_blocks.txt80
2 files changed, 96 insertions, 7 deletions
diff --git a/caddyconfig/httpcaddyfile/httptype.go b/caddyconfig/httpcaddyfile/httptype.go
index e4e40b282..406d8b953 100644
--- a/caddyconfig/httpcaddyfile/httptype.go
+++ b/caddyconfig/httpcaddyfile/httptype.go
@@ -450,6 +450,15 @@ func (st *ServerType) serversFromPairings(
var hasCatchAllTLSConnPolicy, addressQualifiesForTLS bool
autoHTTPSWillAddConnPolicy := autoHTTPS != "off"
+ // if a catch-all server block (one which accepts all hostnames) exists in this pairing,
+ // we need to know that so that we can configure logs properly (see #3878)
+ var catchAllSblockExists bool
+ for _, sblock := range p.serverBlocks {
+ if len(sblock.hostsFromKeys(false)) == 0 {
+ catchAllSblockExists = true
+ }
+ }
+
// create a subroute for each site in the server block
for _, sblock := range p.serverBlocks {
matcherSetsEnc, err := st.compileEncodedMatcherSets(sblock)
@@ -563,13 +572,13 @@ func (st *ServerType) serversFromPairings(
} else {
// map each host to the user's desired logger name
for _, h := range sblockLogHosts {
- // if the custom logger name is non-empty, add it to
- // the map; otherwise, only map to an empty logger
- // name if the server block has a catch-all host (in
- // which case only requests with mapped hostnames will
- // be access-logged, so it'll be necessary to add them
- // to the map even if they use default logger)
- if ncl.name != "" || len(hosts) == 0 {
+ // if the custom logger name is non-empty, add it to the map;
+ // otherwise, only map to an empty logger name if this or
+ // another site block on this server has a catch-all host (in
+ // which case only requests with mapped hostnames will be
+ // access-logged, so it'll be necessary to add them to the
+ // map even if they use default logger)
+ if ncl.name != "" || catchAllSblockExists {
if srv.Logs.LoggerNames == nil {
srv.Logs.LoggerNames = make(map[string]string)
}
diff --git a/caddytest/integration/caddyfile_adapt/log_except_catchall_blocks.txt b/caddytest/integration/caddyfile_adapt/log_except_catchall_blocks.txt
new file mode 100644
index 000000000..a6fd05132
--- /dev/null
+++ b/caddytest/integration/caddyfile_adapt/log_except_catchall_blocks.txt
@@ -0,0 +1,80 @@
+http://localhost:2020 {
+ log
+ file_server
+}
+
+:2020 {
+ respond 418
+}
+----------
+{
+ "apps": {
+ "http": {
+ "servers": {
+ "srv0": {
+ "listen": [
+ ":2020"
+ ],
+ "routes": [
+ {
+ "match": [
+ {
+ "host": [
+ "localhost"
+ ]
+ }
+ ],
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "file_server",
+ "hide": [
+ "./Caddyfile"
+ ]
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "handle": [
+ {
+ "handler": "subroute",
+ "routes": [
+ {
+ "handle": [
+ {
+ "handler": "static_response",
+ "status_code": 418
+ }
+ ]
+ }
+ ]
+ }
+ ],
+ "terminal": true
+ }
+ ],
+ "automatic_https": {
+ "skip": [
+ "localhost"
+ ]
+ },
+ "logs": {
+ "logger_names": {
+ "localhost:2020": ""
+ },
+ "skip_unmapped_hosts": true
+ }
+ }
+ }
+ }
+ }
+} \ No newline at end of file