summaryrefslogtreecommitdiff
path: root/modules/caddyhttp/fileserver/caddyfile.go
diff options
context:
space:
mode:
authorSteffen Brüheim <ueffel@gmail.com>2021-03-30 02:47:19 +0200
committerGitHub <noreply@github.com>2021-03-29 18:47:19 -0600
commitf35a7fa466ffb06c38dcb3216e30c13aa8e14ce5 (patch)
tree5fb5b40ad787a6db69cc1bec543fe6eed234748f /modules/caddyhttp/fileserver/caddyfile.go
parent75f797debdd6c4294497edba9889c6251a8542e7 (diff)
encode,staticfiles: Content negotiation, precompressed files (#4045)
* encode: implement prefer setting * encode: minimum_length configurable via caddyfile * encode: configurable content-types which to encode * file_server: support precompressed files * encode: use ReponseMatcher for conditional encoding of content * linting error & documentation of encode.PrecompressedOrder * encode: allow just one response matcher also change the namespace of the encoders back, I accidently changed to precompressed >.> default matchers include a * to match to any charset, that may be appended * rounding of the PR * added integration tests for new caddyfile directives * improved various doc strings (punctuation and typos) * added json tag for file_server precompress order and encode matcher * file_server: add vary header, remove accept-ranges when serving precompressed files * encode: move Suffix implementation to precompressed modules
Diffstat (limited to 'modules/caddyhttp/fileserver/caddyfile.go')
-rw-r--r--modules/caddyhttp/fileserver/caddyfile.go31
1 files changed, 27 insertions, 4 deletions
diff --git a/modules/caddyhttp/fileserver/caddyfile.go b/modules/caddyhttp/fileserver/caddyfile.go
index 3acbfa9..2ba53f2 100644
--- a/modules/caddyhttp/fileserver/caddyfile.go
+++ b/modules/caddyhttp/fileserver/caddyfile.go
@@ -19,8 +19,10 @@ import (
"strings"
"github.com/caddyserver/caddy/v2"
+ "github.com/caddyserver/caddy/v2/caddyconfig"
"github.com/caddyserver/caddy/v2/caddyconfig/httpcaddyfile"
"github.com/caddyserver/caddy/v2/modules/caddyhttp"
+ "github.com/caddyserver/caddy/v2/modules/caddyhttp/encode"
"github.com/caddyserver/caddy/v2/modules/caddyhttp/rewrite"
)
@@ -33,10 +35,11 @@ func init() {
// server and configures it with this syntax:
//
// file_server [<matcher>] [browse] {
-// root <path>
-// hide <files...>
-// index <files...>
-// browse [<template_file>]
+// root <path>
+// hide <files...>
+// index <files...>
+// browse [<template_file>]
+// precompressed <formats...>
// }
//
func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error) {
@@ -77,6 +80,26 @@ func parseCaddyfile(h httpcaddyfile.Helper) (caddyhttp.MiddlewareHandler, error)
}
fsrv.Browse = new(Browse)
h.Args(&fsrv.Browse.TemplateFile)
+ case "precompressed":
+ var order []string
+ for h.NextArg() {
+ modID := "http.precompressed." + h.Val()
+ mod, err := caddy.GetModule(modID)
+ if err != nil {
+ return nil, h.Errf("getting module named '%s': %v", modID, err)
+ }
+ inst := mod.New()
+ precompress, ok := inst.(encode.Precompressed)
+ if !ok {
+ return nil, h.Errf("module %s is not a precompressor; is %T", modID, inst)
+ }
+ if fsrv.PrecompressedRaw == nil {
+ fsrv.PrecompressedRaw = make(caddy.ModuleMap)
+ }
+ fsrv.PrecompressedRaw[h.Val()] = caddyconfig.JSON(precompress, nil)
+ order = append(order, h.Val())
+ }
+ fsrv.PrecompressedOrder = order
default:
return nil, h.Errf("unknown subdirective '%s'", h.Val())
}