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