b0907649b16362e6913ef0d4327b91bead570b0c
Caddy L4 Proxy Server
一个基于 Caddy 2.11.4 和 caddy-l4 模块的容器化反向代理服务器,支持 HTTP/HTTPS 应用层反代和 TCP/UDP 四层转发。
特性
- Layer 4 代理:通过
caddy-l4模块支持 TCP/UDP 四层转发,适合 SSH、MySQL、Redis 等非 HTTP 服务 - 自动 HTTPS:Caddy 自动申请和续期 Let's Encrypt 证书,无需手动配置
- 国内优化:构建阶段配置了国内 Go 代理源 (
goproxy.cn),加速镜像构建 - 容器化部署:使用 Docker 和 Docker Compose 快速部署,支持数据和配置持久化
- 管理 API:Caddy 管理 API 监听在 2019 端口
系统要求
- Docker 20.10+ 或 Docker Desktop
- Docker Compose 2.0+(如使用 Compose 启动)
- Linux 主机(推荐)或 macOS/Windows with Docker Desktop
快速开始
1. 构建镜像
docker build -t caddy-l4:local .
2. 使用 Docker Compose 运行
docker compose up -d
3. 使用 Docker 直接运行
docker run -d \
-p 80:80 \
-p 443:443 \
-p 2222:2222 \
-v "$PWD/Caddyfile:/etc/caddy/Caddyfile:ro" \
-v caddy_data:/data \
-v caddy_config:/config \
-e ACME_AGREE=true \
--restart unless-stopped \
--name caddy_l4 \
caddy-l4:local
配置
Caddyfile 示例
HTTPS 反向代理(应用层)
git.example.com {
reverse_proxy 10.8.0.15:3000
}
Caddy 会自动:
- 申请 Let's Encrypt 证书
- 监听 443 (HTTPS)
- 将 HTTP 流量重定向到 HTTPS
- 反代请求到 10.8.0.15:3000
TCP 四层转发(Layer 4)
{
layer4 {
:2222 {
route {
proxy 127.0.0.1:22
}
}
}
}
监听 2222 端口,直接转发 TCP 流量到本地 22 端口(SSH)
环境变量
ACME_AGREE=true:同意 Let's Encrypt 服务条款,启用自动 HTTPS
持久化存储
caddy_data:/data:存储 ACME 证书和其他数据caddy_config:/config:存储 Caddy 运行时配置
常见命令
查看容器日志
docker compose logs -f caddy
重启服务
docker compose restart caddy
停止服务
docker compose down
验证 Caddyfile 语法
docker run --rm -v "$PWD/Caddyfile:/etc/caddy/Caddyfile:ro" caddy-l4:local \
caddy validate --config /etc/caddy/Caddyfile --adapter caddyfile
查看 Caddy 版本和模块
docker run --rm caddy-l4:local caddy version
网络配置
Docker Compose 中的 host 网络模式
当前 docker-compose.yml 使用 network_mode: host,这意味着:
- 容器直接使用宿主机网络栈
- 无需进行 -p 端口映射
- 容器内
127.0.0.1指向宿主机本地地址 - 适合需要访问宿主机服务的场景
如果使用桥接网络(默认),需要修改配置:
ports:
- "80:80"
- "443:443"
- "2222:2222"
- "2019:2019"
云服务器部署
镜像推送到 Docker Hub
docker build -t yourusername/caddy-l4:latest .
docker push yourusername/caddy-l4:latest
服务器端拉取和运行
docker pull yourusername/caddy-l4:latest
docker compose up -d
重要提示
- 防火墙:云服务器需要开放相应端口(80、443、2222 等)
- 域名 DNS:HTTPS 反代的域名需要提前解析到云服务器 IP
- 证书申请:首次启动会自动从 Let's Encrypt 申请证书,需要互联网连接和正确的 DNS 解析
故障排查
证书无法申请
- 检查域名 DNS 是否正确解析到服务器 IP:
ndig yourdomain.com - 检查 80 和 443 端口是否对外开放
- 查看日志:
docker compose logs caddy
反代无法连接
- 确认目标服务地址是否正确(特别是 host 网络模式下的 localhost 问题)
- 使用
docker exec caddy_l4 curl http://target:port在容器内测试连通性
L4 转发无法工作
- 确认 TCP 转发目标服务已启动
- 测试:
telnet localhost 2222或ssh user@localhost -p 2222
文件说明
Dockerfile:基于 caddy:2.11.4 镜像,集成 caddy-l4 模块docker-compose.yml:一键启动配置Caddyfile:Caddy 配置文件(需自行编写或修改)README.md:本文件
许可
Caddy 采用 Apache 2.0 许可,详见 Caddy 官方文档
参考资源
Description
Languages
Dockerfile
100%