文档
a project

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

进一步阅读