Caddyfile教程
本教程将教你HTTP Caddyfile的基础知识,以便你可以快速轻松地生成美观、功能强大的站点配置。
目标:
- 🔲 第一个站点
- 🔲 静态文件服务器
- 🔲 模板
- 🔲 压缩
- 🔲 多个站点
- 🔲 匹配器
- 🔲 环境变量
- 🔲 注释
先决条件:
- 基本的终端/命令行技能
- 基本的文本编辑器技能
- PATH变量包含
caddy
新建一个名为Caddyfile
(无扩展名)的文本文件。
首先应该输入的是你的网站地址。
localhost
然后按回车键并输入你想要它执行的操作。对于本教程,使你的Caddyfile如下所示:
localhost respond "Hello, world!"
保存并运行Caddy(因为这是一个培训教程,我们将使用该--watch
标志,以便自动应用对Caddyfile的更改):
caddy run --watch
第一次,系统会要求你输入密码。这样Caddy就可以通过HTTPS为你的网站提供服务。
在你的浏览器中使用HTTPS浏览https://localhost,检查你的网站服务器是否正常运行。
这并不是特别令人兴奋,所以让我们将静态响应更改为启用目录列表的文件服务器 :
localhost file_server browse
保存你的 Caddyfile,然后刷新你的浏览器页面。如果当前目录中有索引文件,你应该会看到文件列表或HTML页面。
添加功能
利用文件服务器还可以做一些更有意思事情:基于模板页面展示。创建一个新文件并粘贴如下内容:
<!DOCTYPE html> <html> <head> <title>Caddy tutorial</title> </head> <body> Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}} </body> </html>
将其在当前目录保存为caddy.html
,然后在浏览器中访问:https://localhost/caddy.html
输出内容如下:
Page loaded at: {{now | date "Mon Jan 2 15:04:05 MST 2006"}}
等一下,我们不是应该能看到今天的日期吗?为什么它不起作用呢?这是因为:服务器尚未配置模板!小事一桩,只需在Caddyfile中添加一行即可:
localhost templates file_server browse
保存它,然后刷新浏览器页面,你将会看到:
Page loaded at: Thu Nov 21 14:58:49 CST 2024
使用Caddy的模板模块,你可以对静态文件做很多有用的事情,例如包含其他HTML文件、制作子请求、设置响应头、处理数据结构等等!
使用快速且现代的压缩算法压缩响应是一种很好的做法。使用 encode
可以启用Gzip和Zstandard支持:
localhost encode zstd gzip templates file_server browse
这是启动和运行半高级、可应用于生产的站点的基本过程!
当你准备好开启自动HTTPS时,只需将你的网站地址(localhost
在我们的教程中)替换为你的域名即可。有关更多信息,请参阅我们的HTTPS快速入门指南。
多个站点
使用我们当前的Caddyfile,我们只能有一个站点定义!只有第一行可以是站点的地址,然后文件的所有其余部分都必须是该站点的指令。
但是制作起来很容易,所以我们可以添加更多网站!
到目前为止,我们的Caddyfile内容如下:
localhost encode zstd gzip templates file_server browse
相当于这个:
localhost { encode zstd gzip templates file_server browse }
这样就能添加两个甚至更多的站点了。
通过将我们的站点块包裹在花括号{ }
中,我们可以在同一个Caddyfile中定义多个不同的站点。
例如:
:8080 { respond "I am 8080" } :8081 { respond "I am 8081" }
当用花括号包裹站点块时,只有地址出现在花括号外,指令都出现在花括号内。
对于共享相同配置的多个站点,你可以添加更多地址,例如:
:8080, :8081 { ... }
然后,你可以根据需要定义任意数量的不同站点,只要每个地址都是唯一的。
匹配器
我们可能只想将某些指令应用于某些请求。例如,假设我们想要同时拥有一个文件服务器和一个反向代理,但我们显然不能在每个请求上都这样做!文件服务器将写入静态文件,或者反向代理将请求代理到后端。
这个配置不会像我们想要的那样工作:
localhost file_server reverse_proxy 127.0.0.1:9005
在实践中,我们可能只想对 API 请求使用反向代理,即基本路径为/api/
。通过添加匹配器标记很容易做到这一点:
localhost file_server reverse_proxy /api/* 127.0.0.1:9005
这里,现在反向代理只会处理所有以/api/
开始的请求。
我们刚刚添加的/api/*
标记就被称为匹配器标记,你可以说它是一个匹配器标记,因为它以正斜杠开头,并且出现在指令之后(但你始终可以在指令文档中查找它以确定)。
匹配器真的很强大。你可以命名匹配器并使用它们@name
来匹配不仅仅是请求路径!在继续之前花点时间了解更多关于匹配器的信息!
环境变量
Caddyfile适配器允许在解析Caddyfile之前替换环境变量。
首先,设置一个环境变量(在运行Caddy的同一shell中):
export SITE_ADDRESS=localhost:9055
然后你可以在Caddyfile中这样使用它:
{$SITE_ADDRESS} file_server
在解析Caddyfile之前,它将被扩展为:
localhost:9055 file_server
你可以在Caddyfile中的任何位置使用环境变量,使用数量也没有限制。
注释
最后一件你会发现最有帮助的事情:如果你想在你的Caddyfile中添加注释或注释任何东西,你可以将#
放在行首:
# this starts a comment