mirror of
https://github.com/caddyserver/caddy.git
synced 2025-01-21 12:41:46 +08:00
Move fallbackHosts to vhostTrie
This commit is contained in:
parent
4991d702fd
commit
a197c864e8
|
@ -57,6 +57,16 @@ func makeTLSConfig(group []*SiteConfig) (*tls.Config, error) {
|
||||||
return caddytls.MakeTLSConfig(tlsConfigs)
|
return caddytls.MakeTLSConfig(tlsConfigs)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func getFallbacks(sites []*SiteConfig) []string {
|
||||||
|
fallbacks := []string{}
|
||||||
|
for _, sc := range sites {
|
||||||
|
if sc.FallbackSite {
|
||||||
|
fallbacks = append(fallbacks, sc.Addr.Host)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return fallbacks
|
||||||
|
}
|
||||||
|
|
||||||
// NewServer creates a new Server instance that will listen on addr
|
// NewServer creates a new Server instance that will listen on addr
|
||||||
// and will serve the sites configured in group.
|
// and will serve the sites configured in group.
|
||||||
func NewServer(addr string, group []*SiteConfig) (*Server, error) {
|
func NewServer(addr string, group []*SiteConfig) (*Server, error) {
|
||||||
|
@ -66,6 +76,7 @@ func NewServer(addr string, group []*SiteConfig) (*Server, error) {
|
||||||
sites: group,
|
sites: group,
|
||||||
connTimeout: GracefulTimeout,
|
connTimeout: GracefulTimeout,
|
||||||
}
|
}
|
||||||
|
s.vhosts.fallbackHosts = append(s.vhosts.fallbackHosts, getFallbacks(group)...)
|
||||||
s.Server = makeHTTPServerWithHeaderLimit(s.Server, group)
|
s.Server = makeHTTPServerWithHeaderLimit(s.Server, group)
|
||||||
s.Server.Handler = s // this is weird, but whatever
|
s.Server.Handler = s // this is weird, but whatever
|
||||||
|
|
||||||
|
|
|
@ -52,6 +52,9 @@ type SiteConfig struct {
|
||||||
// preserving functionality needed for proxying,
|
// preserving functionality needed for proxying,
|
||||||
// websockets, etc.
|
// websockets, etc.
|
||||||
Timeouts Timeouts
|
Timeouts Timeouts
|
||||||
|
|
||||||
|
// If true all unmatched requests will be served by this site
|
||||||
|
FallbackSite bool
|
||||||
}
|
}
|
||||||
|
|
||||||
// Timeouts specify various timeouts for a server to use.
|
// Timeouts specify various timeouts for a server to use.
|
||||||
|
|
|
@ -10,14 +10,15 @@ import (
|
||||||
// wildcards as TLS certificates support them), then
|
// wildcards as TLS certificates support them), then
|
||||||
// by longest matching path.
|
// by longest matching path.
|
||||||
type vhostTrie struct {
|
type vhostTrie struct {
|
||||||
edges map[string]*vhostTrie
|
fallbackHosts []string
|
||||||
site *SiteConfig // site to match on this node; also known as a virtual host
|
edges map[string]*vhostTrie
|
||||||
path string // the path portion of the key for the associated site
|
site *SiteConfig // site to match on this node; also known as a virtual host
|
||||||
|
path string // the path portion of the key for the associated site
|
||||||
}
|
}
|
||||||
|
|
||||||
// newVHostTrie returns a new vhostTrie.
|
// newVHostTrie returns a new vhostTrie.
|
||||||
func newVHostTrie() *vhostTrie {
|
func newVHostTrie() *vhostTrie {
|
||||||
return &vhostTrie{edges: make(map[string]*vhostTrie)}
|
return &vhostTrie{edges: make(map[string]*vhostTrie), fallbackHosts: []string{"0.0.0.0", ""}}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Insert adds stack to t keyed by key. The key should be
|
// Insert adds stack to t keyed by key. The key should be
|
||||||
|
@ -45,12 +46,6 @@ func (t *vhostTrie) insertPath(remainingPath, originalPath string, site *SiteCon
|
||||||
t.edges[ch].insertPath(remainingPath[1:], originalPath, site)
|
t.edges[ch].insertPath(remainingPath[1:], originalPath, site)
|
||||||
}
|
}
|
||||||
|
|
||||||
// When matching a site, the given host will be tried first.
|
|
||||||
// Then, FallbackHosts will be tried in order.
|
|
||||||
// Default FallbackHosts are following wildcards,
|
|
||||||
// which could be modified by plugins and directives.
|
|
||||||
var FallbackHosts = []string{"0.0.0.0", ""}
|
|
||||||
|
|
||||||
// Match returns the virtual host (site) in v with
|
// Match returns the virtual host (site) in v with
|
||||||
// the closest match to key. If there was a match,
|
// the closest match to key. If there was a match,
|
||||||
// it returns the SiteConfig and the path portion of
|
// it returns the SiteConfig and the path portion of
|
||||||
|
@ -65,7 +60,7 @@ func (t *vhostTrie) Match(key string) (*SiteConfig, string) {
|
||||||
host, path := t.splitHostPath(key)
|
host, path := t.splitHostPath(key)
|
||||||
// try the given host, then, if no match, try fallback hosts
|
// try the given host, then, if no match, try fallback hosts
|
||||||
branch := t.matchHost(host)
|
branch := t.matchHost(host)
|
||||||
for _, h := range FallbackHosts {
|
for _, h := range t.fallbackHosts {
|
||||||
if branch != nil {
|
if branch != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue
Block a user