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
将静态网站内容上传至发布目录,配置防火墙端口放行后,网站应该就可以访问了。
本网站文章版权均为本人所有,未经同意不得私自搬运复制,欢迎注明引用出处的合理转载,图片转载请留言。文章内容仅用于技术研究和探索,不得用于违法目的。