no more nginx, try caddy!

为什么用 caddy, 因为 caddy 可以自动申请 TLS 证书(Lets’ Encrypt),维护证书一直是我的痛点。

OS: CentOS Linux 7 (Core) x86_64

安装

docker pull caddy

目录结构

/opt/caddy/
├── docker-compose.yml
├── Caddyfile
├── data/
└── config/

其中:

  • data/:保存证书(非常重要)
  • config/:Caddy 配置缓存

配置及运行

我的站点结构为一个主站点导航页,以及四个子站点放在二级目录。
https://example.com/
https://example.com/site1/
https://example.com/site2/
https://example.com/site3/
https://example.com/site4/

配置

services:
  caddy:
    image: caddy:latest
    container_name: caddy
    restart: unless-stopped

    ports:
      - "80:80"
      - "443:443"

    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro

      - ./data:/data
      - ./config:/config

      - /path/to/site:/path/to/site:ro
      - /path/to/site1:/path/to/site1:ro
      - /path/to/site2:/path/to/site2:ro
      - /path/to/site3:/path/to/site3:ro
      - /path/to/site4:/path/to/site4:ro

这里的 :ro 表示只读挂载(Read Only)。

对于静态文件目录来说,Caddy 只需要读取内容,不需要写入,因此使用只读挂载更安全。

example.com {

    root * /path/to/site
    file_server

    handle_path /site1/* {
        root * /path/to/site1
        file_server
    }

    handle_path /site2/* {
        root * /path/to/site2
        file_server
    }

    handle_path /site3/* {
        root * /path/to/site3
        file_server
    }

    handle_path /site4/* {
        root * /path/to/site4
        file_server
    }

}

运行

cd /opt/caddy
docker compose up -d

如果修改了挂载目录,使用 docker compose restart 不会生效,需要执行 docker compose down 再重新启动。

二级站点及代理转发

example.com {
    ...
}

# 二级站点
aaa.example.com {
    reverse_proxy host.docker.internal:3000 # 代理转发访问宿主机3000端口 | docker部署写法
}
services:
  caddy:

    ...

    extra_hosts:
      - "host.docker.internal:host-gateway"

no more nginx, try caddy!
http://guoguo.host/blog/p/cec7493a.html
作者
Guoguo
发布于
2026年6月8日
许可协议