830 words
4 minutes
Caddy:简易使用教程
2024-10-01

快速开始#

简介#

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
  1. caddy fmt --overwirte ./Caddyfile格式化配置文件
  2. 修改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
  1. 只要主机或者iP是站点地址的一部分,Caddy默认通过https为所有站点提供服务.

  2. 自动https显式的为地址添加前缀http予以禁用.

  3. 站点在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
Caddy:简易使用教程
https://fuwari.vercel.app/posts/deploy-with-caddy/
Author
Christine
Published at
2024-10-01