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
This commit is contained in:
Matthew Holt 2021-02-22 11:14:59 -07:00
parent 5376e5113e
commit edb362aa96
No known key found for this signature in database
GPG key ID: 2A349DD577D586A5
2 changed files with 195 additions and 2 deletions

View file

@ -442,7 +442,7 @@ func (st *ServerType) serversFromPairings(
var iLongestHost, jLongestHost string var iLongestHost, jLongestHost string
var iWildcardHost, jWildcardHost bool var iWildcardHost, jWildcardHost bool
for _, addr := range p.serverBlocks[i].keys { for _, addr := range p.serverBlocks[i].keys {
if strings.Contains(addr.Host, "*") { if strings.Contains(addr.Host, "*") || addr.Host == "" {
iWildcardHost = true iWildcardHost = true
} }
if specificity(addr.Host) > specificity(iLongestHost) { if specificity(addr.Host) > specificity(iLongestHost) {
@ -453,7 +453,7 @@ func (st *ServerType) serversFromPairings(
} }
} }
for _, addr := range p.serverBlocks[j].keys { for _, addr := range p.serverBlocks[j].keys {
if strings.Contains(addr.Host, "*") { if strings.Contains(addr.Host, "*") || addr.Host == "" {
jWildcardHost = true jWildcardHost = true
} }
if specificity(addr.Host) > specificity(jLongestHost) { if specificity(addr.Host) > specificity(jLongestHost) {

View file

@ -0,0 +1,193 @@
# https://caddy.community/t/caddy-suddenly-directs-my-site-to-the-wrong-directive/11597/2
abcdef {
respond "abcdef"
}
abcdefg {
respond "abcdefg"
}
abc {
respond "abc"
}
abcde, http://abcde {
respond "abcde"
}
:443, ab {
respond "443 or ab"
}
----------
{
"apps": {
"http": {
"servers": {
"srv0": {
"listen": [
":443"
],
"routes": [
{
"match": [
{
"host": [
"abcdefg"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "abcdefg",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
},
{
"match": [
{
"host": [
"abcdef"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "abcdef",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
},
{
"match": [
{
"host": [
"abcde"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "abcde",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
},
{
"match": [
{
"host": [
"abc"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "abc",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
},
{
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "443 or ab",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
}
]
},
"srv1": {
"listen": [
":80"
],
"routes": [
{
"match": [
{
"host": [
"abcde"
]
}
],
"handle": [
{
"handler": "subroute",
"routes": [
{
"handle": [
{
"body": "abcde",
"handler": "static_response"
}
]
}
]
}
],
"terminal": true
}
]
}
}
},
"tls": {
"certificates": {
"automate": [
"ab"
]
}
}
}
}