Caddy 2 is a powerful, enterprise-ready, open source web server with automatic HTTPS written in Go
Caddy 是一个 Go
编写的 Web
服务器,类似于 Nginx
。相较于 Nginx
来说,Caddy
的配置简单了很多,而且默认启用了 https
,更加的安全。
最开始的时候,我使用的还是 Nginx
进行部署,当时主要是也不太了解,磕磕碰碰查资料来部署静态网站,复制粘贴后也能把 server
写起来,但对于里面的字段配置也不怎么明确。最近想要弄反向代理的时候,感觉配置没问题,但就是代理不成功,可能就是菜吧 😣
在查找问题的过程中,发现了 Caddy
,简单尝试之后发现相较于 Nginx
来说,Caddy
的配置简单了很多,没有 Nginx
那么多的配置项。
当然,如果你是用的是宝塔面板,可以忽略上面的所有问题。虽然当初主要是抱着学习的目的没有用宝塔,但确实越来越感觉宝塔是真的方便,可是这就是折腾吧。
官方提供了许多安装方式,你可以在安装页面找到它们。
我服务器的环境是 Ubuntu 20.04
,可以直接使用下面的命令行方式安装,并且自动将 Caddy
作为 systemd
服务:
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo tee /etc/apt/trusted.gpg.d/caddy-stable.asc
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
如果你熟悉 docker
, 也可以直接使用
docker pull caddy
caddy start # 启动
caddy stop # 停止
caddy reload # 重载
Caddy
可以用命令行启动 HTTP 服务,也可以用配置文件(默认:Caddyfile
,当然新版也实现了 json
方式控制),这里我的方案是通过配置文件 Caddyfile
来进行配置,毕竟命令行方式还是只适用临时使用。
默认会在 /etc/caddy/
目录下生成一个 Caddyfile
文件,你可以在这里配置你的服务器,Caddyfile
的配置还是比较简单的,下面是官网的一个示例:
emoryhuang.cn {
root * path/to/blog
encode gzip
tls path/to/emoryhuang.cn.pem path/to/emoryhuang.cn.key
}
首先是网站地址,可以使用通配符,这些是有效地址的示例:
localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
如果多个站点共享相同的定义,你可以将所有站点一起列出:
emoryhuang.cn, www.emoryhuang.cn {
...
}
指令 Directives | 说明 |
---|---|
root | 设置站点根目录的路径 |
gzip | 启用 gzip 压缩 |
tls | 自定义 tls |
reverse_proxy | 反向代理 |
redir | 重定向 |
你可以在官方文档中找到更多的指令。
emoryhuang.cn {
root * path/to/blog
tls path/to/emoryhuang.cn.pem path/to/emoryhuang.cn.key
}
在 caddy
中,配置一个反向代理非常简单,使用 reverse-proxy
命令即可。
cloud.emoryhuang.cn {
reverse_proxy localhost:5212
}
访问 https://cloud.emoryhuang.cn
实际上访问的是服务器的 5212 端口。
利用以下配置可将 https://cloud.emoryhuang.cn/proxy
反向代理到 localhost:5212
cloud.emoryhuang.cn {
reverse_proxy /proxy localhost:5212
}
访问 www.emoryhuang.cn
会 302 Redirect 重定向到 https://emoryhuang.cn
www.emoryhuang.cn {
redir https://emoryhuang.cn{uri}
}
如果要进行多个站点的配置,只需要在 Caddyfile
中简单罗列即可。
emoryhuang.cn {
root * path/to/blog
encode gzip
tls path/to/emoryhuang.cn.pem path/to/emoryhuang.cn.key
}
home.emoryhuang.cn {
root * path/to/homepage
encode gzip
tls path/to/home.emoryhuang.cn.pem path/to/home.emoryhuang.cn.key
file_server
}
cloud.emoryhuang.cn {
reverse_proxy localhost:5212
tls path/to/cloud.emoryhuang.cn.pem path/to/cloud.emoryhuang.cn.key
}
Caddy 是第一个也是唯一一个默认自动使用 HTTPS 的 Web 服务器。
默认情况下,Caddy
通过 HTTPS 为所有站点提供服务。
Caddy
使用本地自动信任的自签名证书(如果允许)通过 HTTPS 提供 IP 地址和本地/内部主机名。Caddy
使用来自公开的 ACME CA 的证书,通过 HTTPS 提供公共 DNS 名称。 Caddy
会自动更新所有托管证书并将 HTTP(默认端口 80)重定向到 HTTPS(默认端口 443)。
总的来说,相较于 Nginx
来说,Caddy
还是简单了很多,如果你熟悉 Nginx
,可以比较一下同等情况下 Nginx
的配置,个人觉得还是比较省心的。
你可以在官方文档中到达更多内容。