mirror of
https://github.com/caddyserver/caddy.git
synced 2024-12-16 21:56:40 -05:00
Miscellaneous cleanups / comments
This commit is contained in:
parent
5300949e0d
commit
9c0bf311f9
8 changed files with 56 additions and 9 deletions
|
@ -30,7 +30,7 @@ import (
|
|||
// with care and wrapped with derivation functions from the
|
||||
// standard context package only if you don't need the Caddy
|
||||
// specific features. These contexts are cancelled when the
|
||||
// lifetime of the modules loaded from it are over.
|
||||
// lifetime of the modules loaded from it is over.
|
||||
//
|
||||
// Use NewContext() to get a valid value (but most modules will
|
||||
// not actually need to do this).
|
||||
|
|
|
@ -348,7 +348,7 @@ func (app *App) automaticHTTPS() error {
|
|||
})
|
||||
|
||||
// manage their certificates
|
||||
log.Printf("[INFO] Enabling automatic HTTPS certificates for %v", domainsForCerts)
|
||||
log.Printf("[INFO] Enabling automatic TLS certificate management for %v", domainsForCerts)
|
||||
err := tlsApp.Manage(domainsForCerts)
|
||||
if err != nil {
|
||||
return fmt.Errorf("%s: managing certificate for %s: %s", srvName, domains, err)
|
||||
|
|
|
@ -19,6 +19,7 @@ import (
|
|||
"net"
|
||||
"net/http"
|
||||
"net/textproto"
|
||||
"net/url"
|
||||
"path"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
@ -59,6 +60,15 @@ func addHTTPVarsToReplacer(repl caddy.Replacer, req *http.Request, w http.Respon
|
|||
}
|
||||
|
||||
switch key {
|
||||
case "http.request.method":
|
||||
return req.Method, true
|
||||
case "http.request.scheme":
|
||||
if req.TLS != nil {
|
||||
return "https", true
|
||||
}
|
||||
return "http", true
|
||||
case "http.request.proto":
|
||||
return req.Proto, true
|
||||
case "http.request.host":
|
||||
host, _, err := net.SplitHostPort(req.Host)
|
||||
if err != nil {
|
||||
|
@ -81,13 +91,8 @@ func addHTTPVarsToReplacer(repl caddy.Replacer, req *http.Request, w http.Respon
|
|||
case "http.request.remote.port":
|
||||
_, port, _ := net.SplitHostPort(req.RemoteAddr)
|
||||
return port, true
|
||||
case "http.request.method":
|
||||
return req.Method, true
|
||||
case "http.request.scheme":
|
||||
if req.TLS != nil {
|
||||
return "https", true
|
||||
}
|
||||
return "http", true
|
||||
|
||||
// current URI, including any internal rewrites
|
||||
case "http.request.uri":
|
||||
return req.URL.RequestURI(), true
|
||||
case "http.request.uri.path":
|
||||
|
@ -106,6 +111,32 @@ func addHTTPVarsToReplacer(repl caddy.Replacer, req *http.Request, w http.Respon
|
|||
qs = "?" + qs
|
||||
}
|
||||
return qs, true
|
||||
|
||||
// original URI, before any internal changes
|
||||
case "http.request.orig_uri":
|
||||
u, _ := req.Context().Value(OriginalURLCtxKey).(url.URL)
|
||||
return u.RequestURI(), true
|
||||
case "http.request.orig_uri.path":
|
||||
u, _ := req.Context().Value(OriginalURLCtxKey).(url.URL)
|
||||
return u.Path, true
|
||||
case "http.request.orig_uri.path.file":
|
||||
u, _ := req.Context().Value(OriginalURLCtxKey).(url.URL)
|
||||
_, file := path.Split(u.Path)
|
||||
return file, true
|
||||
case "http.request.orig_uri.path.dir":
|
||||
u, _ := req.Context().Value(OriginalURLCtxKey).(url.URL)
|
||||
dir, _ := path.Split(u.Path)
|
||||
return dir, true
|
||||
case "http.request.orig_uri.query":
|
||||
u, _ := req.Context().Value(OriginalURLCtxKey).(url.URL)
|
||||
return u.RawQuery, true
|
||||
case "http.request.orig_uri.query_string":
|
||||
u, _ := req.Context().Value(OriginalURLCtxKey).(url.URL)
|
||||
qs := u.Query().Encode()
|
||||
if qs != "" {
|
||||
qs = "?" + qs
|
||||
}
|
||||
return qs, true
|
||||
}
|
||||
|
||||
// hostname labels
|
||||
|
|
|
@ -110,6 +110,7 @@ func (t Transport) RoundTrip(r *http.Request) (*http.Response, error) {
|
|||
|
||||
fcgiBackend, err := DialContext(ctx, network, address)
|
||||
if err != nil {
|
||||
// TODO: wrap in a special error type if the dial failed, so retries can happen if enabled
|
||||
return nil, fmt.Errorf("dialing backend: %v", err)
|
||||
}
|
||||
// fcgiBackend gets closed when response body is closed (see clientCloser)
|
||||
|
|
|
@ -243,6 +243,8 @@ func (h *Handler) Cleanup() error {
|
|||
close(h.HealthChecks.Active.stopChan)
|
||||
}
|
||||
|
||||
// TODO: Close keepalive connections on reload? https://github.com/caddyserver/caddy/pull/2507/files#diff-70219fd88fe3f36834f474ce6537ed26R762
|
||||
|
||||
// remove hosts from our config from the pool
|
||||
for _, upstream := range h.Upstreams {
|
||||
hosts.Delete(upstream.dialInfo.String())
|
||||
|
|
|
@ -141,6 +141,9 @@ func (routes RouteList) BuildCompositeRoute(req *http.Request) Handler {
|
|||
func wrapMiddleware(mh MiddlewareHandler) Middleware {
|
||||
return func(next HandlerFunc) HandlerFunc {
|
||||
return func(w http.ResponseWriter, r *http.Request) error {
|
||||
// TODO: We could wait to evaluate matchers here, just eval
|
||||
// the next matcher and choose the next route...
|
||||
|
||||
// TODO: This is where request tracing could be implemented; also
|
||||
// see below to trace the responder as well
|
||||
// TODO: Trace a diff of the request, would be cool too! see what changed since the last middleware (host, headers, URI...)
|
||||
|
|
|
@ -19,6 +19,7 @@ import (
|
|||
"path/filepath"
|
||||
"runtime"
|
||||
"strings"
|
||||
"time"
|
||||
)
|
||||
|
||||
// Replacer can replace values in strings.
|
||||
|
@ -156,11 +157,17 @@ func globalDefaultReplacements(key string) (string, bool) {
|
|||
return runtime.GOOS, true
|
||||
case "system.arch":
|
||||
return runtime.GOARCH, true
|
||||
case "time.now.common_log":
|
||||
return nowFunc().Format("02/Jan/2006:15:04:05 -0700"), true
|
||||
}
|
||||
|
||||
return "", false
|
||||
}
|
||||
|
||||
// nowFunc is a variable so tests can change it
|
||||
// in order to obtain a deterministic time.
|
||||
var nowFunc = time.Now
|
||||
|
||||
// ReplacerCtxKey is the context key for a replacer.
|
||||
const ReplacerCtxKey CtxKey = "replacer"
|
||||
|
||||
|
|
|
@ -59,3 +59,6 @@ func dataDir() string {
|
|||
}
|
||||
return filepath.Join(baseDir, "caddy")
|
||||
}
|
||||
|
||||
// TODO: Consider using Go 1.13's os.UserConfigDir() (https://golang.org/pkg/os/#UserConfigDir)
|
||||
// if we are going to store the last-loaded config anywhere
|
||||
|
|
Loading…
Reference in a new issue