summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFrederik Ring <frederik.ring@gmail.com>2021-08-02 22:15:27 +0200
committerGitHub <noreply@github.com>2021-08-02 14:15:27 -0600
commit569ecdbd02a3bdf8589f785cca022240973dea4d (patch)
treec86354c75c0c8b608ee7f06a345ae968a21d405f
parentc131339c5cda3a541223fde4a714aab55de13b9a (diff)
httpcaddyfile: Ensure hosts to skip for logs can always be collected (#4258)
* httpcaddyfile: ensure hosts to skip can always be collected Previously, some hosts that should be skipped in logging would be missed as the current logic would only collect them after encountering the first server that would log. This change makes sure the ServerLogConfig is initialized before iterating over the server blocks. * httpcaddyfile: add test case for skip hosts behavior
-rw-r--r--caddyconfig/httpcaddyfile/httptype.go13
-rw-r--r--caddytest/integration/caddyfile_adapt/log_skip_hosts.txt75
2 files changed, 85 insertions, 3 deletions
diff --git a/caddyconfig/httpcaddyfile/httptype.go b/caddyconfig/httpcaddyfile/httptype.go
index 559d7b7..2a11f85 100644
--- a/caddyconfig/httpcaddyfile/httptype.go
+++ b/caddyconfig/httpcaddyfile/httptype.go
@@ -522,6 +522,16 @@ func (st *ServerType) serversFromPairings(
}
}
+ // if needed, the ServerLogConfig is initialized beforehand so
+ // that all server blocks can populate it with data, even when not
+ // coming with a log directive
+ for _, sblock := range p.serverBlocks {
+ if len(sblock.pile["custom_log"]) != 0 {
+ srv.Logs = new(caddyhttp.ServerLogConfig)
+ break
+ }
+ }
+
// create a subroute for each site in the server block
for _, sblock := range p.serverBlocks {
matcherSetsEnc, err := st.compileEncodedMatcherSets(sblock)
@@ -636,9 +646,6 @@ func (st *ServerType) serversFromPairings(
sblockLogHosts := sblock.hostsFromKeys(true)
for _, cval := range sblock.pile["custom_log"] {
ncl := cval.Value.(namedCustomLog)
- if srv.Logs == nil {
- srv.Logs = new(caddyhttp.ServerLogConfig)
- }
if sblock.hasHostCatchAllKey() {
// all requests for hosts not able to be listed should use
// this log because it's a catch-all-hosts server block
diff --git a/caddytest/integration/caddyfile_adapt/log_skip_hosts.txt b/caddytest/integration/caddyfile_adapt/log_skip_hosts.txt
new file mode 100644
index 0000000..6fbd85a
--- /dev/null
+++ b/caddytest/integration/caddyfile_adapt/log_skip_hosts.txt
@@ -0,0 +1,75 @@
+one.example.com {
+ log
+}
+
+two.example.com {
+}
+
+three.example.com {
+}
+
+example.com {
+}
+----------
+{
+ "apps": {
+ "http": {
+ "servers": {
+ "srv0": {
+ "listen": [
+ ":443"
+ ],
+ "routes": [
+ {
+ "match": [
+ {
+ "host": [
+ "three.example.com"
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": [
+ "one.example.com"
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": [
+ "two.example.com"
+ ]
+ }
+ ],
+ "terminal": true
+ },
+ {
+ "match": [
+ {
+ "host": [
+ "example.com"
+ ]
+ }
+ ],
+ "terminal": true
+ }
+ ],
+ "logs": {
+ "skip_hosts": [
+ "three.example.com",
+ "two.example.com",
+ "example.com"
+ ]
+ }
+ }
+ }
+ }
+ }
+}