如果我们想要通过互联网访问服务器上的程序,例如搭建一个博客网站,就需要一个 Web 服务器;与同类的老大哥 Nginx、Apache 相比,Caddy 配置简单、申请域名证书更加方便。
这篇文章将帮助大家在 Linux 服务器上安装 Caddy 并配置反向代理。
什么是 Caddy?
Caddy 是一款现代的、用 Go 语言编写的开源 Web 服务器。它以简单易用、功能强大以及自动获取和更新 SSL 证书的能力而著称。与传统的 Web 服务器不同,Caddy 注重自动化和默认安全性,因此非常容易上手。
Web 服务器是运行在服务器端的一类软件,服务器可以理解为一台(或者大到一个机房) 24 小时开机运行的电脑,如果用户需要访问服务器上的文件、或者运行服务器上的软件,不可能获得服务器的控制权限,而是通过浏览器输入域名访问网站—服务器返回结果这种形式来进行;Web 服务器就在这中间扮演了一个中转者的角色,它接受来自互联网用户的(HTTP)请求,然后提供(HTTP)回复给请求者。HTTP 回复一般包含一个 HTML 文件,有时也可以包含纯文字档案、图像或其他类型的文件。
安装 Caddy
官方的安装文档提供了详细的全平台安装命令,以 Debian 11 为例,SSH 登入服务器,运行
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg --dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudo tee /etc/apt/sources.list.d/caddy-stable.list
sudo apt update
sudo apt install caddy
输入
caddy -v
查看是否安装成功。

配置 Caddy 作为反向代理
1. 本地安装 Web 程序
我们先在本地安装好需要互联网访问的 Web 程序,例如前面介绍的 Vikunja 和 Memos,并记录它们的访问端口,这里 Vikunja-3456,Memos-5230,

2. 域名 DNS 解析到服务器 IP
在域名托管商的 DNS 管理界面,例如 Cloudflare,添加 A 记录将子域名解析到服务器 IP,

如果使用 Cloudflare,还需要将 SSL/TLS 加密模式设置成完全或者完全(严格),

3. 修改 Caddyfile
我们通过一个全局的配置文件来操作 Caddy,配置文件在 /etc/caddy/Caddyfile
,通过 Linux 自带的或一些 SSH 客户端的编辑器来修改,

默认的 Caddyfile 是这样,
# The Caddyfile is an easy way to configure your Caddy web server.
#
# Unless the file starts with a global options block, the first
# uncommented line is always the address of your site.
#
# To use your own domain name (with automatic HTTPS), first make
# sure your domain's A/AAAA DNS records are properly pointed to
# this machine's public IP, then replace ":80" below with your
# domain name.
:80 {
# Set this path to your site's directory.
root * /usr/share/caddy
# Enable the static file server.
file_server
# Another common task is to set up a reverse proxy:
# reverse_proxy localhost:8080
# Or serve a PHP site through php-fpm:
# php_fastcgi localhost:9000
}
# Refer to the Caddy docs for more information:
# <https://caddyserver.com/docs/caddyfile>
先全部删除,再修改成
vikunja.044447.xyz {
reverse_proxy localhost:3456
}
memos.044447.xyz {
reverse_proxy localhost:5230
}
并保存退出到终端。
其中 vikunja.044447.xyz
是刚才我们解析到 Vikunja 的域名,reverse_proxy
驱动 Caddy 进行反向代理操作,localhost:3456
是本地 Vikunja 运行的 IP:端口,类似的写入 Memos 的配置段。
4. 重启 Caddy 使配置生效
每次修改完 Caddyfile 后运行命令,
systemctl restart caddy
使配置生效。
如果要使用 Caddy 反向代理更多的 Web 程序,按如上步骤在 Caddyfile 里不断添加配置段即可,注意端口不要冲突。
5. 检查域名是否可以访问
最后就是浏览器直接输入域名,检查是否可以访问了,按照上面的步骤一步一步来,一般是没有问题的,


Caddy 地址
官方文档:https://caddyserver.com/docs/
中文文档:https://caddy2.dengxiaolong.com/docs/
可以发现 Caddy 配置反向代理还是非常简单的,作为 Web 服务器, Caddy 还可以托管网站,实现负载均衡等等,可以访问官方文档解锁更多 Caddy 的强大功能。