Caddyfile 教程
本教程将教您 HTTP Caddyfile 的基础知识,以便您可以快速轻松地生成美观、实用的站点配置。
目标:
- 🔲 第一个站点
- 🔲 静态文件服务器
- 🔲 模板
- 🔲 压缩
- 🔲 多个站点
- 🔲 匹配器
- 🔲 环境变量
- 🔲 注释
先决条件:
- 基本的终端/命令行技能
- 基本的文本编辑器技能
caddy
在你的 PATH 中
创建一个名为 Caddyfile(无扩展名)的新文本文件。
你应该输入的第一件事是你网站的地址
localhost
然后按回车键,输入你想让它做什么。在本教程中,使你的Caddyfile看起来像这样。
localhost respond "Hello, world!"
保存并运行Caddy(由于这是一个培训教程,我们将使用--watch
标志,这样Caddy文件的变化就会自动应用)
caddy run --watch
第一次,你会被要求提供你的密码。这是为了让Caddy能够通过HTTPS为您的网站提供服务。
在你的浏览器中打开localhost,看到你的网络服务器正在工作,完成了HTTPS!
这不是特别令人兴奋,所以让我们把我们的静态响应改为启用目录列表的文件服务器。
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: Fri Nov 5 03:33:19 UTC 2021
使用 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 一样使用它们来匹配,而不仅仅是请求路径!在继续之前,请花点时间了解有关匹配器的更多信息!
Environment variables
Caddyfile 适配器允许在解析 Caddyfile 之前替换环境变量。
首先,设置一个环境变量(在运行 Caddy 的同一个 shell 中):
export SITE_ADDRESS=localhost:9055
然后你可以在 Caddyfile 中像这样使用它:
{$SITE_ADDRESS} file_server
在解析 Caddyfile 之前,它会被扩展为:
localhost:9055 file_server
您可以在Caddy文件中的任何地方使用环境变量,对于任意数量的令牌。
注释
您会发现最后一件事最有帮助:如果您想在 Caddyfile 中注释或记下任何内容,您可以使用注释,以 # 开头:
# this starts a comment