变量
占位符语法
章节「占位符语法」Caddyfile 支持两种占位符,注意区别:
| 语法 | 含义 |
|---|---|
{http.request.uri} |
Caddyfile 占位符——在 Caddyfile 阶段就替换 |
{$ENV_VAR} |
环境变量——由 shell / systemd 注入 |
{env.ENV_VAR} |
显式环境变量占位符 |
{$DOMAIN} { reverse_proxy localhost:9000}环境变量带默认值:
api.example.com { reverse_proxy {$API_BACKEND:localhost:8080}}常用占位符
章节「常用占位符」请求相关
章节「请求相关」{http.request.uri} 完整路径,含query{http.request.uri.path} 仅路径{http.request.uri.query} query string{http.request.method} GET / POST{http.request.host} Host 头{http.request.header.X-Token} 指定头{http.request.body} 请求体(需要 request_body 指令开启){http.request.remote.ip} 客户端 IP{http.request.scheme} http / https响应相关
章节「响应相关」{http.error.status_code} 错误状态码{http.error.status_text} 状态文本{http.error.message} 错误详情{http.response.header.*} 响应头{http.response.upstream_latency} 上游耗时{http.response.duration} 总处理耗时环境与占位
章节「环境与占位」{host} 当前站点块地址{env.PATH} 环境变量{time.now.year} 当前年{time.now.unix} Unix 时间戳{file.<path>} 文件内容(需开启 file 插件)实战:条件跳转
章节「实战:条件跳转」example.com { @www host www.example.com redir @www https://example.com{uri} 301}这里 @www 定义了匹配器,redir 接受匹配器作为第一个参数——所以不会把所有请求都跳走。
实战:把上游耗时暴露成头
章节「实战:把上游耗时暴露成头」reverse_proxy localhost:3000 { header_up X-Upstream-Latency {http.response.upstream_latency}}反代时透传客户端信息
章节「反代时透传客户端信息」reverse_proxy localhost:3000 { header_up Host {host} header_up X-Real-IP {http.request.remote.ip} header_up X-Forwarded-Proto {http.request.scheme}}Caddy 默认已经会设置 X-Forwarded-For / X-Forwarded-Proto / X-Forwarded-Host,一般不用手动写。只有当你有嵌套代理(Caddy 前面还有一层 Nginx/Cloudflare)时才需要特别处理。
环境变量清单
章节「环境变量清单」# systemd 注入sudo systemctl edit caddy[Service]Environment="DOMAIN=example.com"Environment="API_BACKEND=localhost:8080"EnvironmentFile=/etc/caddy/caddy.env改完 sudo systemctl restart caddy(环境变量变更需要重启,reload 不够)。