Caddy2 installation and hosting of static blogs
以下操作均为ubuntu环境
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/gpg/gpg.155B6D79CA56EA34.key' | sudo apt-key add -
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/cfg/setup/config.deb.txt?distro=debian&version=any-version' | sudo tee -a /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
安装完成后,在命令窗口输入caddy,可以查看caddy相关的命令。
usage:
caddy <command> [<args...>]
commands:
adapt Adapts a configuration to Caddy's native JSON
build-info Prints information about this build
environ Prints the environment
file-server Spins up a production-ready file server
fmt Formats a Caddyfile
hash-password Hashes a password and writes base64
help Shows help for a Caddy subcommand
list-modules Lists the installed Caddy modules
reload Changes the config of the running Caddy instance
reverse-proxy A quick and production-ready reverse proxy
run Starts the Caddy process and blocks indefinitely
start Starts the Caddy process in the background and then returns
stop Gracefully stops a started Caddy process
trust Installs a CA certificate into local trust stores
untrust Untrusts a locally-trusted CA certificate
validate Tests whether a configuration file is valid
version Prints the version
首先到官网下载Caddy2,然后将下载的文件改名为caddy后上传至服务器。
sudo mv caddy /usr/bin/
caddy version #测试是否正常运行
sudo groupadd --system caddy
sudo useradd --system \
--gid caddy \
--create-home \
--home-dir /var/lib/caddy \
--shell /usr/sbin/nologin \
--comment "Caddy web server" \
caddy
下载caddy.service文件,并移动到/etc/systemd/system/caddy.service。然后可以通过以下指令配置caddy运行状态:
sudo systemctl daemon-reload #重载配置
sudo systemctl enable caddy #启用caddy
sudo systemctl start caddy #开启caddy
sudo systemctl reload caddy #应用所有配置文件修改
sudo systemctl status caddy #查看caddy状态
sudo systemctl stop caddy #停止caddy
使用官方服务文件时,caddy输出将重定向到journalctl
journalctl -u caddy --no-pager | less
Caddy2与Caddy1不同,开始使用json作为默认的配置文件,但是仍然可以使用Caddyfile进行配置,后续内容均使用Caddyfile。默认Caddyfile路径为/etc/caddy,使用vi或nano编辑该文件,若无该文件则手动创建。
cd /etc/caddy
touch Caddyfile #若目录下无配置文件
sudo nano Caddyfile
在配置文件填写以下内容:
your domain {
root * /root/deploy #你需要发布的文件路径
file_server
}
这样网站就可以跑起来了,但是还没有配置 HTTPS,自动的HTTPS是个人使用Caddy的最大优势。
Caddy的Auto-HTTPS验证有几种方法,分为HTTP验证、TLS-ALPN验证和DNS验证。
这两种验证方式分别需要80端口和443端口没有被其他服务占用,可被Caddy使用。
这两种验证的配置方式较为简单,仅需要在配置文件中添加:
tls xxxxx@xxx.com #你的邮箱
就可以实现自动HTTPS。
配置完成后的完整配置:
your domain {
root * /root/deploy #你需要发布的文件路径
file_server
tls xxxxx@xxx.com #你的邮箱
}
以Cloudflare为DNS托管服务商为例。首先去Cloudflare控制台,选择站点->获取您的 API 令牌->API令牌->创建令牌->编辑区域DNS->使用模板,选择相关配置后,创建令牌,复制并记录令牌。在Caddyfile的网站配置中添加一下语句。
tls {
dns cloudflare $your_token
}
配置完成后的完整配置:
your domain {
root * /root/deploy #你需要发布的文件路径
file_server
tls {
dns cloudflare $your_token
}
}
Cloudflare的DNS验证需要Caddy的验证插件,而源安装的版本是不带验证插件的,需要对caddy源文件进行替换,首先去官网下载预编译插件版本源文件,注意选择插件,运行平台后下载。

下载后上传至服务器,并移动源文件至/usr/bin/目录下。
sudo mv caddy /usr/bin/
chmod +x /usr/bin/caddy #赋可执行权限
重启Caddy,并运行caddy list-modules,查看插件是否已在已安装列表中。

这里就完成了基于DNS验证的Auto-HTTPS的配置。
关于Auto-HTTPS更详细进一步的配置参考请官方文档。
Caddyfile 支持类似代码中函数一样的配置片段,可以在任意位置被 import引入,且可以传递参数,下面分别配置一部分配置片段。
启用HTHS ( HTTP Strict Transport Security,HTTP严格传输安全 ), 它告诉浏览器只能通过HTTPS访问当前资源,而不是HTTP:
(HSTS) {
# HSTS (最大时长63072000 seconds)
header / Strict-Transport-Security "max-age=63072000"
}
错误处理
处理404错误页面,指向网站根目录的404页面:
(ERROR_HANDLE) {
handle_errors {
@404 {
expression {http.error.status_code} == 404
}
handle @404 {
rewrite * /404.html
file_server
}
}
}
开启并配置log
(LOG) {
log {
output file "{args.0}" {
roll_size 500MiB #滚动存储大小最大500MiB
roll_local_time #使用服务器本地时间
roll_keep 20 #保存20个版本的滚动log
roll_keep_for 30d #滚动保存时长30天
}
}
}
其中{args.0}为通过参数传递的log文件名信息。
配置TLS使其更安全
(TLS_CONFIG) {
# TLS 配置采用 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 生成
# Due to a lack of DHE support, you -must- use an ECDSA cert to support IE 11 on Windows 7
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
聚合为通用配置
(GENERAL_CONFIG) {
# 使用HTTP验证或TLS-ALPN验证
tls xxxxxx@xxx.com {
import TLS_CONFIG
}
# HSTS
import HSTS
# 压缩支持
encode zstd gzip
# 错误处理
import ERROR_HANDLE
}
配置全局设置
尝试在全局设置中开启HTTP3支持
{
servers :443 {
protocol {
experimental_http3
}
}
}
(TLS_CONFIG) {
# TLS 配置采用 https://mozilla.github.io/server-side-tls/ssl-config-generator/ 生成
# Due to a lack of DHE support, you -must- use an ECDSA cert to support IE 11 on Windows 7
protocols tls1.2 tls1.3
ciphers TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 TLS_ECDHE_ECDSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 TLS_ECDHE_ECDSA_WITH_CHACHA20_POLY1305_SHA256 TLS_ECDHE_RSA_WITH_CHACHA20_POLY1305_SHA256
}
(LOG) {
log {
output file "{args.0}" {
roll_size 500MiB
roll_local_time
roll_keep 20
roll_keep_for 30d
}
}
}
(HSTS) {
# HSTS (最大时长63072000 seconds)
header / Strict-Transport-Security "max-age=63072000"
}
(ERROR_HANDLE) {
handle_errors {
@404 {
expression {http.error.status_code} == 404
}
handle @404 {
rewrite * /404.html
file_server
}
}
}
(GENERAL_CONFIG) {
# 使用HTTP验证或TLS-ALPN验证
tls xxxxxx@xxx.com {
import TLS_CONFIG
}
# HSTS
import HSTS
# 压缩支持
encode zstd gzip
# 错误处理
import ERROR_HANDLE
}
{
servers :443 {
protocol {
experimental_http3
}
}
}
example.com {
# Set this path to your site's directory.
root * /root/deploy #替换为你需要发布的文件路径
file_server
import LOG "/root/deploy/logs/example.com.log" #替换为你需要的文件路径和文件名
import GENERAL_CONFIG
}
# 引入其他的站点配置
import /etc/caddy/*.caddy
首先使用caddy validate命令,验证配置文件语法有无错误。
caddy validate --config /etc/caddy/Caddyfile
停止并重新启动caddy
caddy stop
caddy start
或者
caddy reload --config /etc/caddy/Caddyfile
将静态网站内容上传至发布目录,配置防火墙端口放行后,网站应该就可以访问了。
The copyright of the articles on this website is owned by me. Without consent, it is not allowed to copy without permission. Reasonable reprints are welcome to indicate the source of the quotation. Please leave a message for reprinting pictures. The content of the article is only used for technical research and exploration, and shall not be used for illegal purposes.