关于反向代理,详见链接
介绍
Caddy2,配置文件为 Caddyfile,自带自动HTTPS、自动X‑Forwarded头、WebSocket支持、负载均衡、健康检查,不需要额外编译模块。
语法
[站点地址] {
reverse_proxy [匹配器] 后端地址... {
# 代理子参数
}
}
简单例子
1)命令行快速代理(无需Caddyfile 文件)
caddy reverse-proxy --from :8000 --to 127.0.0.1:9000
2)纯HTTP代理(内网/本地测试,不会申请证书)
地址前加http://,关闭自动HTTPS:
http://127.0.0.1:8000 {
reverse_proxy 127.0.0.1:9000
}
配置校验命令:caddy validate --config Caddyfile
重载配置:caddy reload --config Caddyfile
3)域名自动HTTPS(公网最常用)
写域名,Caddy自动申请Let’s Encrypt证书,80自动跳转443 HTTPS
demo.example.com {
# 建议带上邮箱,方便接收证书到期告警
tls your@email.com
# 将全部请求代理到本地8080后端服务
reverse_proxy 127.0.0.1:8080
}
配置校验命令:caddy validate --config Caddyfile
重载配置:caddy reload --config Caddyfile
使用自有证书(不自动申请)
demo.example.com {
tls C:/caddy/cert.pem C:/caddy/key.pem
reverse_proxy 127.0.0.1:8080
}
路径匹配器:按URL分流
匹配器写在reverse_proxy后面,只匹配该路径的请求才转发;匹配器必须带通配符*。
demo.example.com {
# /api/开头的请求转发后端
reverse_proxy /api/* 127.0.0.1:8080
# 其余路径返回静态文件
file_server
}
注意:Caddy匹配器不会自动截取前缀,后端收到完整/api/xxx;
使用 handle 块做复杂路由
demo.example.com {
handle /api/* {
reverse_proxy 127.0.0.1:8080
}
handle /admin/* {
reverse_proxy 127.0.0.1:8081
}
handle /* {
file_server
}
}
默认携带请求头
Caddy反向代理(reverse_proxy)-默认携带的请求头
请求头配置
Caddy反向代理(reverse_proxy)-请求头配置
transport传输层配置
transport http控制Caddy与后端之间的HTTP连接参数:keepalive、超时、后端是否HTTPS等。
超时设置
Windows环境注意事项
- Caddyfile 保存为无扩展名文件名,编码使用UTF‑8;
- Windows路径分隔符直接写
/,不要写\;
常见坑
- ❌域名配置没有写
http://→ Caddy尝试公网申请证书,内网环境报错;内网测试务必加http://ip:port。 - ❌路径匹配
reverse_proxy /api 127.0.0.1:8080,缺少*,只能匹配/api,不能匹配/api/xxx,必须写/api/*。 - ❌转发时URI前缀不去除:浏览器请求
/api/xxx,后端收到/api/xxx,需要rewrite * {path.strip_prefix /api}。 - ❌多层代理获取真实IP,需要配置全局
trusted_proxies,不要只写在单个reverse_proxy块内。 - WebSocket不需要任何Upgrade配置,Caddy自动识别。