caddy如何使用
Easul Lv6

相关链接

Caddyfile整体架构

image

常用命令

相关命令行详细参数可 参考

BASH
1
2
3
4
5
6
7
8
9
10
11
12
# 1. 运行caddy,可以输出日志
caddy run
# 如果 Caddyfile 不在当前目录或者不叫 Caddyfile ,可以使用如下命令运行
caddy run --config /path/to/Caddyfile
# 2. 以后台进程运行 caddy
caddy start
# 3. 关闭 caddy
caddy stop
# 4. 重新加载配置文件,用于 0停机 加载配置文件
caddy reload
# 5. 将 Caddyfile 转换为 标准JSON 并在控制台输出
caddy adapt --conig Caddyfile

常用快捷方式

临时托管文件目录

BASH
1
2
3
4
5
# 进入到文件目录,运行如下命令
# --browse 用于没有索引文件时直接将当前目录内容进行托管,可以直接托管播放视频
# --listen :2020 指定托管的端口
# --root ~/mysite 指定一个指定的目录进行托管
caddy file-server --browse --listen :2020

反向代理

BASH
1
2
3
4
5
6
# 用 2080 端口反代 9000
# 如果 前边的域名 和 后边的域名 不一致
# 可以使用 --change-host-header 来修改 --to 的 host 头
caddy reverse-proxy --from :2080 --to :9000
# 可以使用 --change-host-header 来修改 --to 的 host 头
caddy reverse-proxy --from example.com:443 --to https://localhost:9000 --change-host-header

Caddyfile

托管文件服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
# 指定了域名,那么只有该域名可以访问该内容
# 如果只指定端口,那么任何指向该服务器的域名都可以访问该服务
# 添加多个域名可以 www.example.com:port, www.example1.com:port
www.example.com:port {
# 添加 Gzip 和 Zstandard 压缩
encode zstd gzip
# browse 如果没有索引文件,可以直接托管当前目录
file_server browse
# 设置站点根目录,这里的 matcher 匹配了所有的路径,相关语法可参考如下链接
# 可设置 路径, 文件 ,请求方法, 请求头, 请求协议, 请求参数 等的匹配器
# https://caddyserver.com/docs/caddyfile/matchers#syntax
root * /path/to/mysite
}

反向代理

1
2
3
4
5
6
7
8
9
10
# 指定了域名,那么只有该域名可以访问该内容
# 如果只指定端口,那么任何指向该服务器的域名都可以访问该服务
# 添加多个域名可以 www.example.com:port, www.example1.com:port
www.example.com:port {
# 如果不设置路径,那么就反向代理 所有路径
# 相关 matcher 可以参考如下链接
# 可设置 路径, 文件 ,请求方法, 请求头, 请求协议, 请求参数 等的匹配器
# https://caddyserver.com/docs/caddyfile/matchers#syntax
reverse_proxy /api/* 127.0.0.1:9005
}

同域名既托管文件又反向代理

1
2
3
4
5
6
7
8
9
www.example.com:port {
# 用于文件托管
file_server
# 这里只反代 path 为 /api/ 开头的请求
# 这里匹配的路径使用了 matchers ,可以参考如下文档
# 可设置 路径, 文件 ,请求方法, 请求头, 请求协议, 请求参数 等的匹配器
# https://caddyserver.com/docs/caddyfile/matchers#syntax
reverse_proxy /api/* 127.0.0.1:9005
}

其他

如果域名绑定了 内网IP ,那么 caddy 是无法申请 HTTPS 证书的,可以参考 这里 来实现该功能。
相关 Caddyfile文件配置 可以进行参考。

 评论