使用 Caddy 替代 Nginx
使用 Caddy 替代 Nginx
前言
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
那么多的配置项。
当然,如果你是用的是宝塔面板,可以忽略上面的所有问题。虽然当初主要是抱着学习的目的没有用宝塔,但确实越来越感觉宝塔是真的方便,可是这就是折腾吧。
安装 Caddy
官方提供了许多安装方式,你可以在安装页面找到它们。
我服务器的环境是 Ubuntu 20.04
,可以直接使用下面的命令行方式安装,并且自动将 Caddy
作为 systemd
服务:
1 | sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https |
如果你熟悉 docker
, 也可以直接使用
1 | docker pull caddy |
常用命令
1 | caddy start # 启动 |
Caddyfile 配置
Caddy
可以用命令行启动 HTTP 服务,也可以用配置文件(默认:Caddyfile
,当然新版也实现了 json
方式控制),这里我的方案是通过配置文件 Caddyfile
来进行配置,毕竟命令行方式还是只适用临时使用。
默认会在 /etc/caddy/
目录下生成一个 Caddyfile
文件,你可以在这里配置你的服务器,Caddyfile
的配置还是比较简单的,下面是官网的一个示例:
1 | emoryhuang.cn { |
首先是网站地址,可以使用通配符,这些是有效地址的示例:
localhost
example.com
:443
http://example.com
localhost:8080
127.0.0.1
[::1]:2015
example.com/foo/*
*.example.com
http://
同时映射多个地址
如果多个站点共享相同的定义,你可以将所有站点一起列出:
1 | emoryhuang.cn, www.emoryhuang.cn { |
Caddyfile 指令
指令 Directives | 说明 |
---|---|
root | 设置站点根目录的路径 |
gzip | 启用 gzip 压缩 |
tls | 自定义 tls |
reverse_proxy | 反向代理 |
redir | 重定向 |
你可以在官方文档中找到更多的指令。
自定义 SSL 证书
1 | emoryhuang.cn { |
反向代理
在 caddy
中,配置一个反向代理非常简单,使用 reverse-proxy
命令即可。
1 | cloud.emoryhuang.cn { |
访问 https://cloud.emoryhuang.cn
实际上访问的是服务器的 5212 端口。
利用以下配置可将 https://cloud.emoryhuang.cn/proxy
反向代理到 localhost:5212
1 | cloud.emoryhuang.cn { |
重定向
访问 www.emoryhuang.cn
会 302 Redirect 重定向到 https://emoryhuang.cn
1 | www.emoryhuang.cn { |
多站点配置
如果要进行多个站点的配置,只需要在 Caddyfile
中简单罗列即可。
1 | emoryhuang.cn { |
自动 HTTPS
Caddy 是第一个也是唯一一个默认自动使用 HTTPS 的 Web 服务器。
默认情况下,Caddy
通过 HTTPS 为所有站点提供服务。
Caddy
使用本地自动信任的自签名证书(如果允许)通过 HTTPS 提供 IP 地址和本地/内部主机名。Caddy
使用来自公开的 ACME CA 的证书,通过 HTTPS 提供公共 DNS 名称。
Caddy
会自动更新所有托管证书并将 HTTP(默认端口 80)重定向到 HTTPS(默认端口 443)。
总结
总的来说,相较于 Nginx
来说,Caddy
还是简单了很多,如果你熟悉 Nginx
,可以比较一下同等情况下 Nginx
的配置,个人觉得还是比较省心的。
你可以在官方文档中到达更多内容。