caddy 是使用 go 语言开发的一个 server 服务器

相对于 nginx 来说,这个部署更简单,配置起来也很简单,很适合搭私人站点使用,而且相比于 nginx 来说,这个只有单文件,很适合小白使用

而且,这东西最大的优点是,可以通过简单的配置来支持 https,而无需操心证书,另外还支持 http2 协议

这里有一份中文文档,请注意查收

入手

以 mac os 为例 我只需要 brew install caddy 然后, 运行 caddy,这样就完成了最简单的部署过程…

当然这是因为有默认配置的关系,整个项目是单文件的,就只有一个 caddy 文件

其他系统的参考官网

运行结果如下 图片 默认是 2015 端口,可能是代表这个项目是 2015 年创建/发布的?

然后打开 http://localhost:2015/ 就可以看到你的网页了,当然这里因为有默认的原因,你看到的也许是 404,或是其他的什么

自定义配置

caddy 支持命令行的一些简单配置和配置文件的复杂配置

命令行

使用caddy -h 可以看到最新最全的命令行参数列表 图片

这里说命令行运行简单命令的意思并不是支持不全,而是有一些复杂的情况,如果用命令行来做调错比较麻烦

比如 -agree 同意 CA 的协议

-ca XXX 获取指定 host 的 ca 证书

一般情况下比较有用的就是

-conf string 使用配置文件

-email string ca 的 email

-host string 域名

-http-port string http 协议的端口号 默认 80

-https-port string https 协议的端口号 默认是 443

-port string 端口号

-log string 日志文件的目录

-http2 支持 http2 协议

这部分具体的可以参考 官网 cli部分

CA 相关的  就是 https 要用到的东西

在使用域名的方式之前 你需要确定好你的域名解析是指向当前这台计算机的

配置文件

这个使用起来很简单 就是 caddy -conf XXX 这里的 XXX 是配置文件的目录

然后 caddy 会去读取配置文件 这部分可以参考官网 caddyfile 部分,这个是 caddyfile 文件的基本语法

还有一种方式就是简单的使用caddy 这里 caddy 会在当前的运行路径下根据默认约定去寻找 Caddyfile 文件作为配置

localhost:80 {
    root /Users/caijinglong/www
    gzip
    log /Users/caijinglong/www/log/caddy.log
}

这里是一个简单配置方案 80 端口

这里就是开启 html 的文件目录,gzip ,指定日志文件,

这里需要将目录替换成你自己的目录

图片

我的目录结构是这样的 只要我在这个目录下运行,就可以看到这样的  效果 图片

图片

我们的服务器就启动起来了

然后进行一些其他的配置

这里可以参考一下 http 协议的配置

我们在配置文件上有标题的概念 这个标题就是反向代理的地址 图片

支持如下的格式,包括协议 host ,通配符,端口,path

docker 的方式配置

以当前的网站为例,我在阿里 dns 上配置了域名解析,然后我只需要如下配置即可完成 kikt.top www.kikt.top的配置,且自动完成了 https 协议

首先是 Caddyfile

kikt.top {
  gzip
  tls cjl_spy@163.com
}

www.kikt.top {
  gzip
  tls cjl_spy@163.com
}

这里我没有指定目录是因为 Caddy 的 docker 镜像中我配置了映射的原因

docker-componse.yaml

version: "3"
services:
  blog-web-caddy:
    image: abiosoft/caddy
    ports:
      - "80:80"
      - "443:443"
    volumes:
      - $HOME/docker/caddy/.caddy:/root/.caddy
      - $HOME/docker/caddy/Caddyfile:/etc/Caddyfile
      - $HOME/html/www:/srv
    environment:
      - TZ=Asia/Shanghai

这里我使用的镜像是abiosoft/caddy

这里有详细介绍,我只是使用了几个简单的配置

  1. 指定了端口号,将 80 443 端口映射出来
  2. 指定了文件映射,证书文件,Caddyfile,html 文件

去那边关掉 nginx 后

接着执行docker-compose up -d,这样就完成了全部的部署,这样我的 blog html 服务器就从 nginx 切换到了 caddy 😁

一些其他的配置

我的服务器中在 3000 端口有一个 gogs 的 git 服务器

我修改 Caddyfile

kikt.top {
  gzip
  tls cjl_spy@163.com
}

www.kikt.top {
  gzip
  tls cjl_spy@163.com
}

git.kikt.top {
  gzip
  proxy / kikt.top:3000
}

增加一个二级域名,把 git.kikt.top 代理到同域名的 3000 端口上

后记

caddy 总体来说还是入门比较容易的,配置也相对简单,但是目前可能还没有 nginx 的周边那么丰富,而且市场占有率现在也无法相比

如果是自己搭网站,可以用 caddy,简单易用,也不用考虑那么多东西,直接零配置支持 https

如果是为了今后的职业规划 nginx 还是必须要学习的