使用 Docker Compose 部署 Caddy 并配置安全增强
docker caddy docker-compose https security-headersCaddy 是一个现代化的 Web 服务器,以自动 HTTPS(Let’s Encrypt 集成)、简洁配置和高性能著称。本文将指导你通过 Docker Compose 快速部署 Caddy,并配置安全响应头、自定义网络和日志轮转。
📌 前提:已安装 Docker 和 Docker Compose。若尚未安装,可参考 Linux 一键安装 Docker(支持国内镜像加速)。
1. 创建自定义 Bridge 网络
为便于服务隔离与后续扩展(如接入其他后端服务),我们先创建一个名为 caddy_bridge 的自定义 bridge 网络:
docker network create --driver bridge caddy_bridge
2. 编写 docker-compose.yml
在项目目录中创建 docker-compose.yml 文件,内容如下:
version: "3.9"
services:
caddy:
image: caddy
restart: unless-stopped
ports:
- "80:80" # HTTP
- "443:443" # HTTPS (TCP)
- "443:443/udp" # HTTP/3 (QUIC)
volumes:
- ./Caddyfile:/etc/caddy/Caddyfile
- ./site:/srv # 静态网站根目录
- ./data:/data # Caddy 自动证书等数据
- ./config:/config # 配置缓存(可选)
networks:
- default
networks:
default:
external: true
name: caddy_bridge
✅ 说明:
- 挂载
Caddyfile用于自定义配置;./site目录存放你的静态网页;./data用于持久化 TLS 证书,避免重启后重复申请;- 启用 UDP 443 端口以支持 HTTP/3。
3. 创建 Caddyfile 并配置安全头
在同目录下创建 Caddyfile,定义全局安全策略(使用 Caddy 的 命名片段 功能):
# =============== 公共安全配置片段 ===============
(common_config) {
tls {
protocols tls1.2 tls1.3
}
header {
Permissions-Policy interest-cohort=()
Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
X-Content-Type-Options "nosniff"
Referrer-Policy "strict-origin-when-cross-origin"
X-XSS-Protection "1; mode=block"
-Server
-Via
-Alt-Svc
}
log {
output file /var/log/caddy/global.log {
roll_size 50mb
roll_keep 5
roll_keep_for 720h # 保留30天
}
}
}
🔒 安全头说明:
- HSTS:强制浏览器使用 HTTPS;
- X-Content-Type-Options:防止 MIME 类型嗅探;
- Referrer-Policy:控制 Referer 信息泄露;
- 移除
Server、Via等头部,减少信息暴露。
💡 后续你可以在具体站点配置中引用此片段,例如:
example.com { import common_config root * /srv file_server }
4. 启动服务
确保当前目录结构如下:
.
├── docker-compose.yml
├── Caddyfile
├── site/ # 你的静态文件
├── data/ # 自动创建
└── config/ # 自动创建
然后启动 Caddy:
docker-compose up -d
服务将在后台运行,并自动申请 HTTPS 证书(需域名已解析到服务器公网 IP)。
验证与日志
- 访问
http://your-domain,应自动跳转至 HTTPS; - 查看日志:
docker-compose logs caddy; - 日志文件位于容器内
/var/log/caddy/global.log,可通过挂载进一步持久化(当前未挂载,如需可添加- ./logs:/var/log/caddy)。
通过以上步骤,你已成功部署一个安全、自动 HTTPS、支持 HTTP/3 的 Caddy 服务!