使用 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 服务:

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    # 重载

Caddyfile 配置

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 {
    ...
}

Caddyfile 指令

指令 Directives说明
root设置站点根目录的路径
gzip启用 gzip 压缩
tls自定义 tls
reverse_proxy反向代理
redir重定向

你可以在官方文档中找到更多的指令。

自定义 SSL 证书

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
}

自动 HTTPS

Caddy 是第一个也是唯一一个默认自动使用 HTTPS 的 Web 服务器。

默认情况下,Caddy 通过 HTTPS 为所有站点提供服务。

  • Caddy 使用本地自动信任的自签名证书(如果允许)通过 HTTPS 提供 IP 地址和本地/内部主机名。
  • Caddy 使用来自公开的 ACME CA 的证书,通过 HTTPS 提供公共 DNS 名称。

Caddy 会自动更新所有托管证书并将 HTTP(默认端口 80)重定向到 HTTPS(默认端口 443)。

总结

总的来说,相较于 Nginx 来说,Caddy 还是简单了很多,如果你熟悉 Nginx,可以比较一下同等情况下 Nginx 的配置,个人觉得还是比较省心的。

你可以在官方文档中到达更多内容。

参考资料

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

EmoryHuang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值