Caddyfile
这个页面展示了如何使用Caddyfile来配置Caddy。
介绍
“Caddyfile”是一个Caddy运行的配置文件。类似于httpd.conf或者nginx.conf。Caddyfile可以重名命名为任何名字。但是默认情况下,Caddy会在当前目录下寻找Caddyfile。你可以使用指令来-conf
指定另一个保存配置文件的位置。
$ caddy -conf="/path/to/Caddyfile"
如果你把Caddyfile放在你网站的根目录下,请不要担心。Caddy会返回一个“404 not found”来帮助你隐藏它。
语法
Caddyfile配置文件总是把网站域名放在第一行:
localhost:2020
在那之后,每行都是一个有效的指令。每个指令都是Caddy所给出的关键词,例如gzip
:
localhost:2020
gzip
每个指令后面通常带有一个或多个参数:
localhost:2020
gzip
log ../access.log
一些指令可能需要更多的配置。因此,Caddy允许你使用一个块状配置,块状配置以花括号结尾:
localhost:2020
gzip
log ../access.log
markdown /blog {
css /blog.css
js /scripts.js
}
如果指令块为空,你应当省略书写。在"
内才能书写参数的空格。Caddyfile也能使用注释,以#
开头:
# 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:2020, https://site.com, http://mysite.com {
...
}
网站的地址也可以定义到一个特定的路径或者使用通配符来代替子域名:
example.com/static
*.example.com
请注意的是,你网站的路由请求匹配最长的前缀。如果你的路径是个目录,你可能会将/
作为后缀。
允许使用环境变量在地址和参数的书写中。他们必须使用花括号进行包裹,可以使用Unix或Windows的格式:
localhost:{$PORT}
root {%SITE_ROOT%}
每个平台都适用这种语法。环境变量不能够由一个拓展为多个参数/值。
地址
地址通常是协议://主机:端口/路径
,但是只要有一个参数后其他都是可选的。主机通常是localhost或者是域名。默认端口是2015(除非网站能够自动部署HTTPS,这种情况下,端口是443)。协议通常是另一种指定端口的方式,可选的参数有”http“或者“https”,分别使用的端口是80和443。如果同时指定了协议和端口,端口将覆盖整个地址。例如:
:2015 # Host: (any), Port: 2015
localhost # Host: localhost, Port: 2015
localhost:8080 # Host: localhost, Port: 8080
example.com # Host: example.com, Port: 443
http://example.com # Host: example.com, Port: 80
https://example.com # Host: example.com, Port: 443
http://example.com:1234 # Host: example.com, Port: 1234
https://example.com:80 # Error! HTTPS on port 80
*.example.com # Hosts: *.example.com, Port: 443
example.com/foo/ # Host: example.com, Port: 443, Path: /foo/
/foo/ # Host: (any), Port: 2015, Path: /foo/
指令
在服务器指令块中,每一行都必须是一个有效的指令。指令的顺序是随意的。指令通常是一行中首个单词,紧随其后的是它的配置参数。也可以使用一个指令块来包含多个参数。
大多数指令调用了中间件。中间件在程序中处理HTTP请求。在预编译的时候(如果你愿意的话),中间件可以一起编译。因为有了中间件的使用,Caddy才能如此的快速和高效。
每个指令的用法都不经相同,有些指令必须要参数,而另一些却不需要。请查阅各个指令的帮助文档。
路径匹配
一些指令允许使用参数来指定匹配的基本路径。基本路径是一个前缀,所以它将匹配一个使用基本路径开始的URL。例如:一个基本路径是/foo
,他将匹配/foo,/foo.html,/foobar和/foo/bar.html
。如果你只想限制匹配到目录,那么你需要添加一个后缀/
,例如/foo/
,这将不匹配/foobar