@marcel91200 / caddy Mirror · read-only / commits / edb362aa
Fork 0

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