--- title: "Caddy" type: entity aliases: [Caddy Web Server, Caddy反代] tags: [web-server, reverse-proxy, https, open-source] --- # Caddy ## Overview **Caddy** 是一个用 Go 语言编写的开源 Web 服务器,以自动 HTTPS 和简洁配置著称。相比 Nginx,Caddy 默认启用 HTTPS(Let's Encrypt 自动证书),配置语法更简洁直观。 ## Core Features | 特性 | 说明 | |------|------| | **自动 HTTPS** | 自动从 Let's Encrypt 申请和续期 SSL 证书 | | **自动 HTTP→HTTPS 重定向** | 无需手动配置 | | **TLS 1.3 支持** | 现代加密标准 | | **配置热加载** | 修改配置无需重启服务 | | **反向代理** | 支持 HTTP/2、WebSocket | | **Markdown 渲染** | 内置静态文件服务 | ## Installation (Ubuntu/Debian) ```bash sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list sudo apt update sudo apt install caddy ``` ## Basic Configuration (Caddyfile) ### 简单反向代理 ``` n8n.ishenwei.online { reverse_proxy 127.0.0.1:15678 } ``` ### 多域名配置 ``` nas.ishenwei.online { reverse_proxy 127.0.0.1:15000 } grafana.ishenwei.online { reverse_proxy 127.0.0.1:13000 } ``` ### 带认证的反向代理 ``` n8n.ishenwei.online { basicauth /* { admin JDJhJDE0JDN3ZXVhV2YyZG9SY2hvYzVmZ2h3QUlVblpOMU4vS1ptcENrSlhySElMb3l5dytOMkh0Tk93 } reverse_proxy 127.0.0.1:15678 } ``` ## Integration with frp 典型架构:frp 建立内网隧道 → Caddy 反向代理到本地端口 → 自动 HTTPS ``` 用户请求 https://n8n.ishenwei.online ↓ 阿里云 DNS → VPS 公网 IP ↓ Caddy (443端口) 接收请求 ↓ Caddyfile 配置匹配 n8n.ishenwei.online ↓ reverse_proxy 127.0.0.1:15678 ↓ frpc 在 VPS 15000 端口监听 ↓ frp 隧道 → 内网 Ubuntu 5678 端口 ↓ n8n 服务 ``` ## Common Commands ```bash # 验证配置文件语法 sudo caddy validate --config /etc/caddy/Caddyfile # 重载配置(热加载) sudo systemctl reload caddy # 重启服务 sudo systemctl restart caddy # 查看状态 sudo systemctl status caddy # 紧急恢复(服务卡死时) sudo systemctl stop caddy sudo pkill -9 caddy sudo systemctl start caddy ``` ## Troubleshooting ### Caddyfile 语法检查 ```bash sudo caddy validate --config /etc/caddy/Caddyfile # 输出 "Valid configuration" 表示语法正确 ``` ### 端口被占用 如果 Caddy 启动失败,检查端口是否被占用: ```bash ss -ltnp | grep ':80\|:443' ``` ### Caddy 意外占用端口 某些一键脚本可能配置 Caddy 监听非标准端口,检查是否有: ``` :7000 { reverse_proxy ... } ``` ## Related Concepts - [[反向代理]] — Caddy 的核心功能 - [[Let's Encrypt]] — Caddy 自动使用的 SSL 证书提供商 - [[frp]] — Caddy 常与 frp 配合使用 - [[VPS]] — Caddy 通常部署在公网 VPS ## References - 官网: https://caddyserver.com/ - 文档: https://caddyserver.com/docs/