Fast and extensible multi-platform HTTP/1-2-3 web server with automatic HTTPS
Mirrored from https://github.com/Slazee/caddy.git
Synced Nov 14, 05:15 UTC
httpcaddyfile: Fix catch-all site block sorting
A site block that has a catch-all and the shortest address is now sorted better. https://caddy.community/t/caddy-suddenly-directs-my-site-to-the-wrong-directive/11597/2
Matthew Holt committed
Feb 22, 2021 at 11:14 UTC
edb362aa96bd8e79adfaca44fbd9f9ce5bff778d
2 files changed
+195
-2
caddyconfig/httpcaddyfile/httptype.go
+2
-2
@@ -442,7 +442,7 @@ func (st *ServerType) serversFromPairings(
442
var iLongestHost, jLongestHost string
443
var iWildcardHost, jWildcardHost bool
444
for _, addr := range p.serverBlocks[i].keys {
445
- if strings.Contains(addr.Host, "*") {
445
+ if strings.Contains(addr.Host, "*") || addr.Host == "" {
446
iWildcardHost = true
447
}
448
if specificity(addr.Host) > specificity(iLongestHost) {
@@ -453,7 +453,7 @@ func (st *ServerType) serversFromPairings(
453
}
454
}
455
for _, addr := range p.serverBlocks[j].keys {
456
- if strings.Contains(addr.Host, "*") {
456
+ if strings.Contains(addr.Host, "*") || addr.Host == "" {
457
jWildcardHost = true
458
}
459
if specificity(addr.Host) > specificity(jLongestHost) {
caddytest/integration/caddyfile_adapt/site_block_sorting.txt
new
+193
@@ -0,0 +1,193 @@
1
+# https://caddy.community/t/caddy-suddenly-directs-my-site-to-the-wrong-directive/11597/2
2
+abcdef {
3
+ respond "abcdef"
4
+}
5
+
6
+abcdefg {
7
+ respond "abcdefg"
8
+}
9
+
10
+abc {
11
+ respond "abc"
12
+}
13
+
14
+abcde, http://abcde {
15
+ respond "abcde"
16
+}
17
+
18
+:443, ab {
19
+ respond "443 or ab"
20
+}
21
+----------
22
+{
23
+ "apps": {
24
+ "http": {
25
+ "servers": {
26
+ "srv0": {
27
+ "listen": [
28
+ ":443"
29
+ ],
30
+ "routes": [
31
+ {
32
+ "match": [
33
+ {
34
+ "host": [
35
+ "abcdefg"
36
+ ]
37
+ }
38
+ ],
39
+ "handle": [
40
+ {
41
+ "handler": "subroute",
42
+ "routes": [
43
+ {
44
+ "handle": [
45
+ {
46
+ "body": "abcdefg",
47
+ "handler": "static_response"
48
+ }
49
+ ]
50
+ }
51
+ ]
52
+ }
53
+ ],
54
+ "terminal": true
55
+ },
56
+ {
57
+ "match": [
58
+ {
59
+ "host": [
60
+ "abcdef"
61
+ ]
62
+ }
63
+ ],
64
+ "handle": [
65
+ {
66
+ "handler": "subroute",
67
+ "routes": [
68
+ {
69
+ "handle": [
70
+ {
71
+ "body": "abcdef",
72
+ "handler": "static_response"
73
+ }
74
+ ]
75
+ }
76
+ ]
77
+ }
78
+ ],
79
+ "terminal": true
80
+ },
81
+ {
82
+ "match": [
83
+ {
84
+ "host": [
85
+ "abcde"
86
+ ]
87
+ }
88
+ ],
89
+ "handle": [
90
+ {
91
+ "handler": "subroute",
92
+ "routes": [
93
+ {
94
+ "handle": [
95
+ {
96
+ "body": "abcde",
97
+ "handler": "static_response"
98
+ }
99
+ ]
100
+ }
101
+ ]
102
+ }
103
+ ],
104
+ "terminal": true
105
+ },
106
+ {
107
+ "match": [
108
+ {
109
+ "host": [
110
+ "abc"
111
+ ]
112
+ }
113
+ ],
114
+ "handle": [
115
+ {
116
+ "handler": "subroute",
117
+ "routes": [
118
+ {
119
+ "handle": [
120
+ {
121
+ "body": "abc",
122
+ "handler": "static_response"
123
+ }
124
+ ]
125
+ }
126
+ ]
127
+ }
128
+ ],
129
+ "terminal": true
130
+ },
131
+ {
132
+ "handle": [
133
+ {
134
+ "handler": "subroute",
135
+ "routes": [
136
+ {
137
+ "handle": [
138
+ {
139
+ "body": "443 or ab",
140
+ "handler": "static_response"
141
+ }
142
+ ]
143
+ }
144
+ ]
145
+ }
146
+ ],
147
+ "terminal": true
148
+ }
149
+ ]
150
+ },
151
+ "srv1": {
152
+ "listen": [
153
+ ":80"
154
+ ],
155
+ "routes": [
156
+ {
157
+ "match": [
158
+ {
159
+ "host": [
160
+ "abcde"
161
+ ]
162
+ }
163
+ ],
164
+ "handle": [
165
+ {
166
+ "handler": "subroute",
167
+ "routes": [
168
+ {
169
+ "handle": [
170
+ {
171
+ "body": "abcde",
172
+ "handler": "static_response"
173
+ }
174
+ ]
175
+ }
176
+ ]
177
+ }
178
+ ],
179
+ "terminal": true
180
+ }
181
+ ]
182
+ }
183
+ }
184
+ },
185
+ "tls": {
186
+ "certificates": {
187
+ "automate": [
188
+ "ab"
189
+ ]
190
+ }
191
+ }
192
+ }
193
+}
\ No newline at end of file