Caddyfile 配置文件的第一行始终是服务器的域名或者IP地址,例如:

localhost:8080

将上面内容保存为Caddyfile,当你运行的时候,会自动寻找该文件,你可以指定文件配置路径:

caddy   -conf ../path/to/Caddyfile

站点的下一行紧接着是指令,你可以点击查看全部指令,例如下面的gzip指令可以压缩页面:

localhost:8080
gzip

指令的后面可以附带一个或者多个参数:

localhost:8080
gzip
log ../access.log

有些指令需要设置多个参数,这些指令需要在后面使用大括号添加一个块,大括号开始必须与指令同一行:

localhost:8080
gzip
log ../access.log
markdown /blog {
    css /blog.css
    js  /scripts.js
}

If the directive block is left empty, you should omit the curly braces entirely.
参数里面如果包含空格必须使用" 括起来,# 后面跟着的是注释内容

# Comments can start a line
foobar # or go at the end

要在一个Caddyfile 里面配置多个站点,你需要使用多个大括号把对于站点的配置包括进来:

mysite.com {
    root /www/mysite.com
}

sub.mysite.com {
    root /www/sub.mysite.com
    gzip
    log ../access.log
}

大括号的开始({)必须与站点名称同一行,大括号的结束(})必须单独一行,全部指令都需要写在对于站点的括号里面。

多个站点可以使用同一个配置,站点之间使用逗号分割:

localhost:8080, https://site.com, http://mysite.com {
    ...
}

可以在域名后面添加路径单独配置一部分文件,也可以在域名前面添加通配符*

example.com/static, *.example.com {
    ...
}

注意,上面会匹配到最长的那个文件夹或文件(可能会匹配到/statics),你可以在路径后面添加/防止出现这种情况。

可以在地址或者参数里面引用环境变量,支持Unix和Windows风格:

localhost:{$PORT}
root {%SITE_ROOT%}

这两种风格与平台无关,单个变量对应单个参数,即使一个变量中包含空格也不会被解析为多个参数。

Caddyfile中并没有继承的语法,没有脚本,一个站点不能重复配置,但是可以通过使用import指令,减少冗余的指令。

原文地址:https://caddyserver.com/tutorial/caddyfile