快速开始
简介
Caddy是一款基于Go语言编写的强大且可扩展的平台,可以给你的站点、服务和应用程序提供服务。
安装
推荐从 caddyserver/caddy · GitHub Releases 下载你需要的文件.
Windows
在合适的位置新建文件夹,将下载好的二进制文件
caddy.exe
放入其中. 在同级目录新建一个文本文件Caddyfile
,这用于caddy的配置文件.Linux
以
Ubuntu
为例, 下载格式为.deb
的安装包sudo apt install ./caddy.deb
查看更多: 安装 — Caddy v2中文文档
配置
守护进程 /lib/systemd/system/caddy.service
TIP默认启动用户是
caddy
,那么你可以新建caddy
用户为其分配合适的权限.
默认页面/usr/share/caddy/index.html
默认配置文件 /etc/caddy/Caddyfile
控制启/停
# 启动
systemctl start caddy
# 停止
systemctl stop caddy
# 查看运行状态
systemctl status caddy
查看更多: 保持Caddy运行 — Caddy v2中文文档
静态文件服务器
编辑/etc/caddy/Caddyfile
:80 {
root * /opt/www
file_server browse
}
caddy将运行在80
端口,*
为匹配全部请求,托管/opt/www
下的文件.
如果目录下没有index.html
文件则 browse
会展示文件列表,可以从浏览器中单击并下载.
这很适合在内网中分发文件.
WARNING
caddy fmt --overwirte ./Caddyfile
格式化配置文件- 修改
Caddyfile
后要重启服务systemctl restart caddy
或者在配置文件目录下caddy reload
内网面板
:443 {
root * /opt/www
encode zstd gzip
templates
file_server browse
}
dist
中包含index.html
所有内容放在指定目录.
访问443
端口,如果运行正常就能正常用https访问面板了,但可能会出现SSL
错误,此时建议使用80
网站托管
example.com {
# 网站根路径
root * /opt/www
# 功能
encode zstd gzip
templates
# 静态服务
file_server browse
}
在第一行填写域名即可,如果运行正常就可以直接用https访问站点了; 如果自动https
没有申请到SSL
证书,则会暂时出现SSL错误.
NOTE
只要主机或者iP是站点地址的一部分,Caddy默认通过
https
为所有站点提供服务.
自动https
显式的为地址添加前缀http
予以禁用.站点在
443
下服务,则自动重定向80
->443
多个站点
:8080 {
root * /opt/example1.com
encode zstd gzip
templates
file_server browse
}
:8081 {
...
}
:8082 {
...
}
# 共享多个站点
:8443, :9000,:9090 {
...
}
反向代理与负载均衡
代理8080
-> 443
localhost:443 {
reverse_proxy 127.0.0.1:8080
}
- 负载均衡
# 代理匹配/api开头的请求
reverse_proxy /api/* {
# 定义多个上游
to node1:80 node2:80 node3:80
# 负载均衡策略
# 'first'选取第一个可用的上游
lb_policy first
# 'random' 随机选取一个可用的上游
# 'least_conn'选择当前请求数最少的上游
# 'ip_hash' 根据ip的哈希值选取一个固定的上游
# 'round_robin' 轮询迭代
}
查看更多: reverse_proxy (Caddyfile指令) — Caddy v2中文文档
使用API控制
首先,我是不建议使用API的,我认为它繁琐,效率低,于是
我推荐你这样使用
创建一个脚本 updatecaddy.sh
#!/usr/bin/bash
# 覆写配置
echo "覆写当前配置文件"
caddy fmt --overwrite ./Caddyfile
# 将当前目录下的Caddyfile重载配置
# 构建一个POST请求
echo "使用当前目录下的Caddyfile重载"
curl "http://localhost:2019/load" \
-H "Content-Type: text/caddyfile" \
--data-binary @Caddyfile