{{$v := Stored.values}} {{$v.Get "domain"}} { {{$root := $v.Get "root"}} {{if $root}} root "{{$root|AddSlashes|ToHTML}}" {{end}} {{if eq ($v.Get "basicauth") "1"}} basicauth "{{Get "basicauth" "username"|AddSlashes}}" "{{Get "basicauth" "password"|AddSlashes}}" { realm "{{Get "basicauth" "realm" "Restricted"|AddSlashes}}" {{Iterator "basicauth" "resources" " "}} } {{end}} {{if eq ($v.Get "ratelimit") "1"}} ratelimit {{Get "ratelimit" "methods"}} {{Get "ratelimit" "rate"}} {{Get "ratelimit" "burst"}} {{Get "ratelimit" "unit"}} { {{AddonAttr "ratelimit" "whitelist"}} {{AddonAttr "ratelimit" "limit_by_header"}} {{AddonAttr "ratelimit" "status"}} {{Iterator "ratelimit" "resources" " "}} } {{end}} {{if eq ($v.Get "cors") "1"}} cors {{Get "cors" "path" "/"}} {{Get "cors" "domains"}} { {{AddonAttr "cors" "origin"}} {{AddonAttr "cors" "origin_regexp"}} {{AddonAttr "cors" "methods"}} {{AddonAttr "cors" "allow_credentials" "false"}} {{AddonAttr "cors" "max_age"}} {{AddonAttr "cors" "allowed_headers"}} {{AddonAttr "cors" "exposed_headers"}} } {{end}} {{if eq ($v.Get "jwt") "1"}} jwt { {{AddonAttr "jwt" "path" "/"}} {{AddonAttr "jwt" "redirect"}} {{IteratorKV "jwt" "allow" " allow "}} {{IteratorKV "jwt" "deny" " deny "}} {{AddonAttr "jwt" "except"}} {{IteratorKV "jwt" "token_source" " token_source "}} {{$strip_header := Get "jwt" "strip_header"}} {{if $strip_header}} strip_header {{end}} {{$passthrough := Get "jwt" "passthrough"}} {{if $passthrough}} passthrough {{end}} {{$allowroot := Get "jwt" "allowroot"}} {{if $allowroot}} allowroot {{end}} {{Iterator "jwt" "publickey" " publickey "}} {{AddonAttr "jwt" "secret"}} } {{end}} {{if eq ($v.Get "locale") "1"}} locale {{Get "locale" "available" "en zh-CN"}} { {{AddonAttr "locale" "detect" "header"}} {{AddonAttr "locale" "cookie" "locale"}} {{AddonAttr "locale" "available" "en zh-CN"}} {{AddonAttr "locale" "path" "/"}} } {{end}} {{if eq ($v.Get "nobots") "1"}} nobots "{{Get "nobots" "bomb" "bomb.gz"|AddSlashes}}" { {{Iterator "nobots" "userAgent" " " true}} {{Iterator "nobots" "userAgentRegexp" " regexp " true}} {{Iterator "nobots" "publicPathRegexp" " public " true}} } {{end}} {{if eq ($v.Get "prometheus") "1"}} prometheus { {{$use_caddy_addr := Get "prometheus" "use_caddy_addr"}} {{if $use_caddy_addr}} use_caddy_addr {{else}} {{AddonAttr "prometheus" "address" "localhost:9180"}} {{end}} {{AddonAttr "prometheus" "path" "/metrics"}} {{AddonAttr "prometheus" "hostname"}} {{IteratorKV "header" "label" " label "}} } {{end}} {{if eq ($v.Get "log") "1"}} log / "{{$v.Get "log_file"|AddSlashes|ToHTML}}" "{{$v.Get "log_format"|Default "{combined} {latency}"|AddSlashes|ToHTML}}" { {{AddonAttr "log" "rotate_size"}} {{AddonAttr "log" "rotate_age"}} {{AddonAttr "log" "rotate_keep"}} {{if eq ($v.Get "log_rotate_compress") "1"}}rotate_compress{{end}} {{$ipv4mask := $v.Get "log_ipmask_v4"}} {{$ipv6mask := $v.Get "log_ipmask_v6"}} {{if or $ipv4mask $ipv6mask}} ipmask {{$ipv4mask}} {{$ipv6mask}} {{end}} {{AddonAttr "log" "except"}} } {{end}} {{if $v.Get "index"}} index {{$v.Get "index"}} {{end}} {{if $v.Get "header_path"}} header {{$v.Get "header_path"}} { {{IteratorKV "header" "" " "}} } {{end}} {{if eq ($v.Get "tls") "1"}} {{if and ($v.Get "tls_cert") ($v.Get "tls_key")}} tls "{{$v.Get "tls_cert"|AddSlashes|ToHTML}}" "{{$v.Get "tls_key"|AddSlashes|ToHTML}}" {{else if $v.Get "tls_email"|ToHTML}} tls {{$v.Get "tls_email"|ToHTML}} {{end}} {{else}} tls off {{end}} {{if eq ($v.Get "gzip") "1"}} gzip { {{AddonAttr "gzip" "ext"}} {{AddonAttr "gzip" "not"}} {{AddonAttr "gzip" "level"}} {{AddonAttr "gzip" "min_length"}} } {{end}} {{if eq ($v.Get "fastcgi") "1"}} fastcgi {{$v.Get "fastcgi_path"}} {{$v.Get "fastcgi_endpoint"}} {{$v.Get "fastcgi_preset"}} { {{AddonAttr "fastcgi" "ext"}} {{AddonAttr "fastcgi" "split"}} {{AddonAttr "fastcgi" "index"}} {{IteratorKV "fastcgi" "env" " env "}} {{AddonAttr "fastcgi" "except"}} {{AddonAttr "fastcgi" "pool"}} } {{end}} {{if eq ($v.Get "proxy") "1"}} proxy {{$v.Get "proxy_from"}} {{$v.Get "proxy_to"}} { {{AddonAttr "proxy" "policy"}} {{AddonAttr "proxy" "fail_timeout"}} {{AddonAttr "proxy" "max_fails"}} {{AddonAttr "proxy" "try_duration"}} {{AddonAttr "proxy" "try_interval"}} {{AddonAttr "proxy" "health_check"}} {{AddonAttr "proxy" "health_check_interval"}} {{AddonAttr "proxy" "health_check_timeout"}} {{IteratorKV "proxy" "header_upstream" " header_upstream "}} {{IteratorKV "proxy" "header_downstream" " header_downstream "}} {{AddonAttr "proxy" "keepalive"}} {{AddonAttr "proxy" "without"}} {{AddonAttr "proxy" "except"}} {{AddonAttr "proxy" "upstream"}} {{Iterator "proxy" "preset" " "}} } {{end}} {{if eq ($v.Get "browse") "1"}} browse {{$v.Get "browse_path"}} {{$v.Get "browse_tmpl"}} {{end}} {{if eq ($v.Get "expires") "1"}} expires { {{IteratorKV "expires" "match" " match "}} {{IteratorKV "expires" "match_header" " match_header "}} } {{end}} {{if eq ($v.Get "ipfilter") "1"}} ipfilter {{$v.Get "ipfilter_paths"}} { rule block {{AddonAttr "ipfilter" "ip"}} {{AddonAttr "ipfilter" "country"}} {{AddonAttr "ipfilter" "database"}} {{AddonAttr "ipfilter" "blockpage"}} {{AddonAttr "ipfilter" "strict"}} } {{end}} {{if eq ($v.Get "filter") "1"}} {{range $index, $searchPattern := GetSlice "filter_search_pattern"}} {{$filterPath := (GetSlice "filter_path").GetByIndex $index}} {{$filterContentType := (GetSlice "filter_content_type").GetByIndex $index}} {{if or $filterPath $filterContentType}} filter rule { {{if $filterPath}} path "{{$filterPath|AddSlashes|ToHTML}}" {{end}} {{if $filterContentType}} content_type "{{$filterContentType|AddSlashes|ToHTML}}" {{end}} {{if and $filterPath $filterContentType}} path_content_type_combination "{{(GetSlice "filter_path_content_type_combination").GetByIndex $index|ToHTML}}" {{end}} search_pattern "{{$searchPattern|AddSlashes|ToHTML}}" replacement "{{(GetSlice "filter_replacement").GetByIndex $index|AddSlashes|ToHTML}}" } {{end}} {{end}} {{$filterMaxBufferSize := Int ($v.Get "filter_max_buffer_size")}} {{if gt $filterMaxBufferSize 0}} filter max_buffer_size {{$filterMaxBufferSize}} {{end}} {{end}} {{$v.Get "rewrite_rule"|ToHTML}} {{if eq ($v.Get "s3browser") "1"}} {{$secure := eq ($v.Get "s3browser_secure") "1"}} s3browser { {{AddonAttr "s3browser" "key"}} {{AddonAttr "s3browser" "secret"|ToHTML}} {{AddonAttr "s3browser" "bucket"}} {{AddonAttr "s3browser" "region"}} {{AddonAttr "s3browser" "endpoint"}} {{AddonAttr "s3browser" "prefix"}} {{AddonAttr "s3browser" "cdnurl"}} secure {{if $secure}}true{{else}}false{{end}} {{AddonAttr "s3browser" "refresh"}} debug {{if eq ($v.Get "s3browser_debug") "1"}}true{{else}}false{{end}} } {{$proxypath := $v.Get "s3browser_proxypath"}} {{if $proxypath}} proxy {{$proxypath}} http{{if $secure}}s{{end}}://{{$v.Get "s3browser_bucket"}}.{{$v.Get "s3browser_endpoint"}} { header_upstream Host {{$v.Get "s3browser_bucket"}}.{{$v.Get "s3browser_endpoint"}} } {{end}} {{end}} }