Caddy server
Caddy 是一个使用 Go 编写的高性能 HTTP 服务器软件。与 Nginx 相似,它主要作为静态网站服务器或反向代理运行。
优点
- 高性能
- 简洁的配置文件
- 全自动 HTTPS (Let's Encrypt)
安装
Caddy 官方为 Linux, Windows, FreeBSD 提供预编译二进制,为主流发行版提供软件包。(见官方安装文档)
如果使用 Arch Linux,sudo pacman -S caddy
即可安装 Caddy,含 systemd 服务。
启动服务
启动 Caddy 服务:
sudo systemctl start caddy
(或者改用 enable --now
同时将服务设置为自动启动)
配置
Caddy 的配置可以通过几种方式进行:
- 名为 Caddyfile 的文本配置文件
- 在服务运行时,通过 HTTP 协议的 admin API 更改配置
- 因为 config adapter 的存在,Caddy 支持更多奇怪的配置:
- JSON、YAML、TOML 格式的配置文件
- Nginx 的配置文件
本文使用 Caddyfile 作为配置方式。
Caddyfile 的路径在 /etc/caddy/Caddyfile
(如果使用默认 systemd 服务配置),修改 Caddyfile 文件后,可以通过 systemctl 加载新的配置:
sudo systemctl reload caddy
静态网站
网站 yuuza.net
,提供 /srv/mysite
作为静态内容
Caddyfile:
yuuza.net {
root * /srv/mysite
file_server
}
Caddy 将会自动为 yuuza.net
申请 TLS 证书。申请成功的前提是,在公网上访问 yuuza.net
到达的服务器就是 Caddy 所在服务器(即域名解析正确,并且 IP 能从公网访问)。并且会自动将 80 端口上的 HTTP 请求跳转到 HTTPS。
“虚拟主机”
Caddy 支持服务多个域名
Caddyfile:
yuuza.net {
root * /srv/mysite
file_server
}
blog.yuuza.net {
root * /srv/myblog
file_server
}
反向代理
将请求反向代理到 127.0.0.1:5000
Caddyfile:
api.yuuza.net {
reverse_proxy 127.0.0.1:5000
}
按路径分发
将 /api/*
反向代理到 127.0.0.1:5000
,对其它路径上的请求提供 /srv/mysite
里的文件
Caddyfile:
yuuza.net {
reverse_proxy /api/* 127.0.0.1:5000
root * /srv/mysite
file_server
}
路径修改
使用上面的配置文件时,https://yuuza.net/api/myip
将会被反代到 127.0.0.1:5000
端口上的 /api/myip
。如果需要将它反代到 /myip
,就要去除路径开头的 /api
Caddyfile:
yuuza.net {
handle /api/* {
uri strip_prefix /api
reverse_proxy * 127.0.0.1:5000
}
root * /srv/mysite
file_server
}