caddy安装与配置

提供web服务的还有Nginx 和Apache,为什么选用Caddy,因为他简单,可以自动申请SSL证书。

下载并安装Caddy

首先去 Download Caddy。在下载页面左侧可以选择你系统平台(PLATFORM)、插件(PLUGINS)、是否开启监控(TELEMETRY)、许可类型(PLAN)。例如我选的是:

  • Platform: Linux 64
  • Plugins: http.cache, http.cors, http.expires, http.filter, http.git, tls.dns.cloudflare
  • TELEMETRY: OFF
  • License: Personal

注意:由于 caddy v2 的推出,本文中原先引用的一些官方脚本链接已经失效,所以可能在安装 caddy v1 时无法顺利完成。
不过,caddy v2 的安装和配置变得更加简便。详细步骤查看:caddy v2 的安装与配置

  1. 完成以上选择后,在页面底部 One-step installer script(bash) 会基于你的选择配置好bash指令。只需要将其复制到bash中执行,即可基于该选择来安装caddy。

以下为我使用的安装指令,你也可以直接使用这条bash命令来安装caddy。

1
curl https://getcaddy.com | bash -s personal http.cache,http.cors,http.expires,http.filter,http.git,tls.dns.cloudflare

安装完后输入which caddy,不出意外的话会输出 /usr/local/bin/caddy,caddy默认安装的位置。

至此,安装完毕,但是目前它不会开机自启,只是简单地把二进制文件下载下来,所以下一步要将Caddy注册为系统服务。

注册为系统服务

  1. 执行以下指令。以拷贝官方提供的脚本文件“caddy.service”,到/etc/systemd/system/

    1
    curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service

    这里我使用的是官方在github上提供的脚本 caddy.service,其他系统也可以在这里找到相应的脚本。

  2. 创建必要的目录。(根据“caddy.service”文件中的配置信息进行目录的创建)

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    sudo mkdir /etc/caddy
    sudo chown -R root:www-data /etc/caddy
    sudo touch /etc/caddy/Caddyfile # caddy的配置文件

    sudo mkdir /etc/ssl/caddy
    sudo chown -R www-data:root /etc/ssl/caddy
    sudo chmod 0770 /etc/ssl/caddy # 证书存放位置

    sudo mkdir /var/www # web网站根目录
    sudo mkdir /var/www/example.com # 对应域名网站的根目录
    sudo chown -R www-data:www-data /var/www

    上面创建了四个目录:

  • /etc/caddy:存放Caddy配置文件的目录;
  • /etc/ssl/caddy:存放证书的目录;
  • /var/www:web网站根目录;
  • /var/www/example.com:根据自己的caddyfile配置中将要使用的域名,创建一个同名的目录。便于管理。

域名认证设置

本文使用cloudflare的dns服务进行域名认证,需要注意的几点:

  1. 域名使用cloudfare的DNS服务;

  2. 安装caddy时候需要附加安装插件:tls.dns.cloudflare;

  3. 在caddy.service文件中设置dns服务商(cloudfare)的环境变量(其他DNS服务商环境配置信息查看官方列表):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    [Service]
    ...
    ...

    Environment=CADDYPATH=/etc/ssl/caddy
    Environment=CLOUDFLARE_EMAIL=xxx@xxx.xxx # 添加CLOUDFLARE用户邮箱
    Environment=CLOUDFLARE_API_KEY=xxx # 添加CLOUDFLARE的Global API Key。My Profile > API Keys
    ...
    ...
  4. 执行sudo systemctl daemon-reload, 以重新加载systemd daemon,让配置生效。

  5. 设置Caddy为开机启动

    1
    sudo systemctl enable caddy.service

    至此,Caddy 已经成功注册服务,并能够开机自启了。接下来要对Caddyfile进行配置。

配置 Caddyfile

Caddyfile配置文件示例:

1
2
3
4
5
6
7
8
9
10
11
example.com {
root /var/www/example.com
gzip
tls {
dns cloudflare
}
proxy /ray localhost:10000 {
websocket
header_upstream -Origin
}
}

说明:

  • root /var/www/example.com:example.com 域名指向的网站根目录;
  • tls { dns cloudflare }: 使用dns服务商cloudflare 自动进行域名认证;
  • proxy /ray localhost:10000 { ... }:将特定的路径请求(这里指发送到/ray的请求),转发到主机本地端口10000

根据需要修改域名、网站根目录,以及转发的目标地址和端口号。通过添加多个proxy字段,可以设置多个转发。

Caddyfile配置的详细信息参见官方文档

完成配置后:

  • 执行命令:sudo systemctl restart caddy.service,以重新启动caddy.service服务。
  • 查看运行状态:systemctl status caddy.service,如果显示为绿色的active,则caddy服务正常运行。如果为红色则是有错误的配置,根据提示进行修改。
  • 查看日志:journalctl --boot -u caddy.service

服务管理

1
2
3
4
5
6
systemctl enable caddy.service   # 开机启动
systemctl start caddy.service # 启动
systemctl stop caddy.service # 停止
systemctl restart caddy.service # 重启
systemctl status caddy.service # 查看状态
systemctl daemon-reload # 重载配置

以下部分非必须,根据个人需要设置

启用 QUIC

关于QUIC,一句话概况就是减少TLS握手次数,加快网站速度。

  1. 修改/etc/systemd/system/caddy.service,在 ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp 后面加上 -quic 。如:
    1
    ExecStart=/usr/local/bin/caddy -log stdout -agree=true -conf=/etc/caddy/Caddyfile -root=/var/tmp -quic
  2. 重新加载Systemd配置,并重启Caddy。
    1
    2
    sudo systemctl daemon-reload
    sudo systemctl restart caddy.service

使用cloudflare的CDN服务

在DNS功能项中将对应的域名解析记录中的Status设置为DNS and HTTP proxy(CDN),变更为橘黄色图标则启动CDN。

根据自己的实际需要决定是否启用CDN,国内访问cloudflare速度较慢。