===============
== ffff65535 ==
===============
十六个一[1111111111111111]

使用 Docker Compose 部署 Caddy 并配置安全增强

docker caddy docker-compose https security-headers

Caddy 是一个现代化的 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 信息泄露;
  • 移除 ServerVia 等头部,减少信息暴露。

💡 后续你可以在具体站点配置中引用此片段,例如:

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 服务!