v2中文文档
项目

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: Wed Apr 24 18:30:30 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

进一步阅读