介绍
Caddy是一个以易于使用为主创的新Web服务器,它足够简单,可以用作快速开发服务器,并且足够强大,可用于生产环境。
它具有直观的配置文件,HTTP/2支持和自动TLS加密。HTTP/2是HTTP协议的新版本,通过使用单个连接来传输多个文件和标题压缩,使网站更快。
Caddy 与 Let's Encrypt紧密集成,该证书机构提供免费的 TLS/SSL 证书,并在需要时自动获取和更新证书。
在本教程中,您将安装和配置Caddy. 遵循本教程后,您将使用HTTP/2和安全的TLS连接提供简单的工作网站。
前提条件
要遵循本教程,您将需要:
- 一台 CentOS 7 服务器设置了 此初始服务器设置教程,包括一个 sudo 非根用户。
- 一个域名配置为指向您的服务器。这对于 Caddy 来说是必要的,以获得网站的 SSL 证书;如果没有使用适当的域名,网站将不会安全地提供 TLS 加密。您可以学习如何将域名指向 DigitalOcean Droplets 通过遵循 如何使用 DigitalOcean 设置主机名称教程。
- 可选的是,安装了
nano
文本编辑器与s yumudo install nano
。 CentOS 默认情况下配备了vi
文本编辑器,但nano
可以更
步骤 1 – 安装 Caddy Binaries
Caddy 项目提供了一个安装脚本,将检索和安装 Caddy 服务器的二进制文件。
1curl -s https://getcaddy.com | bash
您可以通过访问您的浏览器中的https://getcaddy.com
来查看脚本,或者在执行之前下载wget
或curl
的文件。
在安装过程中,脚本将使用sudo
来获得管理权限,以便将Caddy文件放入整个系统的目录中,因此它可能会要求您提供密码。
命令输出将看起来像这样:
1[secondary_label Caddy installation script output]
2Downloading Caddy for linux/amd64...
3https://caddyserver.com/download/linux/amd64?plugins=
4Extracting...
5Putting caddy in /usr/local/bin (may require password)
6[sudo] password for sammy:
7Caddy 0.10.2
8Successfully installed
脚本完成后,Caddy 二进制被安装在服务器上并准备好使用,您可以通过使用哪个
来检查其位置来验证Caddy 二进制已被放置。
1which caddy
命令输出将表示 Caddy 二进制可以在 `/usr/local/bin/caddy 中找到。
Caddy在安装过程中不会创建任何系统配置,也不会作为服务来安装,这意味着在启动过程中不会自动启动。
步骤 2 — 创建 Caddy 的用户和组
虽然Apache和Nginx,两种最流行的HTTP服务器,在安装系统包时创建自己的非特权用户,但Caddy不会这样做. 出于安全原因,它也不应该使用超级用户根
帐户启动。
要创建名为caddy
的用户,让我们键入:
1sudo adduser -r -d /var/www -s /sbin/nologin caddy
-r
交换机使新创建的帐户成为所谓的系统帐户,-d
交换机表示该用户的首页目录,在我们的情况下,它将是/var/www
我们将在以后创建。
现在,当我们有 Caddy Web 服务器的用户可用时,我们可以在下一步配置存储 Caddy 配置文件所需的目录。
步骤三:设置必要的目录
Caddy 的自动 TLS 支持和单元文件(我们将在下一步安装)预计特定目录和文件将存在,具有特定权限。
首先,创建一个目录,该目录将容纳主Caddyfile
,这是一个配置文件,告诉Caddy它应该提供哪些网站以及如何服务。
1sudo mkdir /etc/caddy
将此目录的所有者更改为 root用户,并将其组更改为 www-data,以便Caddy可以读取它。
1sudo chown -R root:caddy /etc/caddy
在此目录中,创建一个空的Caddyfile
,我们将稍后编辑。
1sudo touch /etc/caddy/Caddyfile
在 /etc/ssl
中创建另一个目录. Caddy 需要此功能来存储它从 Let's Encrypt 自动获取的 SSL 私钥和证书。
1sudo mkdir /etc/ssl/caddy
Caddy 需要能够在获取证书时写入此目录,所以使所有者成为 caddy用户. 您可以将组留为 root,从默认情况下保持不变:
1sudo chown -R caddy:root /etc/ssl/caddy
然后,确保没有其他人可以读取这些文件,删除其他人的所有访问权限。
1sudo chmod 0770 /etc/ssl/caddy
我们需要创建的最终目录是网站本身将被发布的目录,我们将使用 /var/www
,这是常见的,也是使用其他Web服务器时的默认路径,如Apache或Nginx。
1sudo mkdir /var/www
此目录应完全由 **caddy 所有。
1sudo chown caddy:caddy /var/www
在下一步,我们将将Caddy配置为系统服务,以确保它从系统启动开始,并可以用systemctl
进行管理。
步骤 4 — 安装 Caddy 作为系统服务
虽然Caddy不将自己安装为服务,但该项目提供了官方的 systemd
单元文件。
将该文件从官方 Caddy 存储库下载. 对 curl
命令的额外 -o’ 参数将将该文件保存到
/etc/systemd/system/目录中,并使其可见到
systemd`。
1sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
在我们可以继续前,我们必须稍微修改该文件,使其使用我们的非特权caddy
用户运行服务器。
让我们用vi
或您最喜欢的文本编辑器打开文件(这里有一个 对vi
的简要介绍)
1sudo vi /etc/systemd/system/caddy.service
并找到负责指定用户帐户和组的片段。
1[label /etc/systemd/system/caddy.service]
2; User and group the process will run as.
3User=www-data
4Group=www-data
将两个值更改为caddy
如下:
1[label /etc/systemd/system/caddy.service]
2; User and group the process will run as.
3User=caddy
4Group=caddy
保存并关闭该文件以退出服务文件现在已经准备好与我们的安装一起使用。
1sudo systemctl daemon-reload
然后,允许Caddy在船上运行。
1sudo systemctl enable caddy.service
您可以通过检查其状态来验证该服务是否正确加载并启用启动。
1sudo systemctl status caddy.service
产量应该如下:
1[secondary_label Caddy service status output]
2● caddy.service - Caddy HTTP/2 web server
3 Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: disabled)
4 Active: inactive (dead)
5 Docs: https://caddyserver.com/docs
具体来说,它说服务是 loaded和 enabled,但它还没有运行,我们还不会启动服务器,因为配置仍然不完整。
您现在已将 Caddy 配置为系统服务,该服务将在启动时自动启动,而无需手动运行。
步骤 5 — 允许 HTTP 和 HTTPS 连接(可选)
如果您已经遵循了 新 CentOS 7 服务器的附加建议步骤教程,并且正在使用防火墙,我们必须手动添加防火墙规则来通过互联网流量到Caddy。
Caddy 使用 HTTP 和 HTTPS 协议提供网站服务,因此我们需要允许访问适当的端口,以便在互联网上提供 Caddy。
1sudo firewall-cmd --permanent --zone=public --add-service=http
2sudo firewall-cmd --permanent --zone=public --add-service=https
3sudo firewall-cmd --reload
所有三个命令,当运行时,将输出以下成功消息:
1[secondary_label firewall-cmd output]
2success
在下一步,我们将创建一个样本网页,并更新Caddyfile
,以便为其提供服务,以测试Caddy安装。
步骤 6 — 创建测试网页和 Caddyfile
让我们开始创建一个非常简单的HTML页面,它会显示一个简单的 **Hello World!**消息. 这个命令将在我们之前创建的网站目录中创建一个index.html
文件,里面只有一行文本,Hello World!</h1>
。
1echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html
接下来,我们将填写Caddyfile
。Caddyfile
,其最简单的形式,由一个或多个 _server 块组成,每一个都定义了单个网站的配置。一个服务器块从一个地址定义开始,然后是弯曲的子。
例如,如果您指定协议但不是端口,后者将自动衍生(即,端口 80 被假定为 HTTP,而端口
443 被假定为 HTTPS)。
使用vi
或您最喜欢的文本编辑器打开您在步骤 2 中创建的Caddyfile
。
1sudo vi /etc/caddy/Caddyfile
用下列内容制作:
1[label /etc/caddy/Caddyfile]
2http:// {
3 root /var/www
4 gzip
5}
然后保存文件并退出,让我们解释这个特定的Caddyfile
是什么。
在这里,我们使用http://
来定义地址,这告诉Caddy它应该连接到端口80
,并使用简单的HTTP协议(没有TLS加密)服务所有请求,无论使用的域名连接到服务器。
在我们服务器块的弯曲的框架内,有两个指令:
*根
指令告诉Caddy网站文件的位置.在我们的示例中,它是/var/www
,我们创建了测试页面
*gzip
指令告诉Caddy使用Gzip压缩来使网站更快。
配置文件完成后,启动 Caddy 服务。
1sudo systemctl start caddy
我們現在可以測試網站是否有效. 為此,您使用您的伺服器的公共 IP 位址. 如果您不知道伺服器的 IP 位址,您可以用 curl -4 icanhazip.com
得到它. 一旦您有它,請瀏覽您喜愛的瀏覽器中的 http://your_server_ip
以查看 Hello World! 網站。
这意味着您的 Caddy 安装正常运行,下一步,您将通过 Caddy 的自动 TLS 支持来启用安全连接到您的网站。
步骤 7 – 配置自动 TLS
区分Caddy与其他Web服务器的主要功能之一是它能够从免费证书授权机构(CA)的Let's Encrypt自动请求和更新TLS证书的能力,此外,将Caddy设置为通过安全连接自动服务网站只需要在Caddyfile中进行一行更改。
Caddy 负责为所有配置的服务器块启用安全的 HTTPS 连接,并自动获得必要的证书,假设服务器块配置满足某些要求。
为了让TLS工作,必须满足以下要求:
- Caddy 必须能够将自己绑定到 HTTPS 端口
443
,并且同一端口必须可以从互联网上访问. - 协议不得设置为 HTTP,端口不得设置为
80', TLS 不得明确关闭或通过其他设置(例如在服务器块中使用
tls` 指令)。 - 主机名必须是有效的域名;它不得空白或设置为
localhost
或 IP 地址。
但是,当前的服务器封锁地址被配置为http://
,定义了一个简单的HTTP方案,没有加密以及没有域名。我们也未向Caddy提供Let’s Encrypt在申请证书时所需的电子邮件地址。如果地址未在配置中提供,Caddy在启动过程中会要求它。然而,由于Caddy安装为系统服务,它在启动过程中无法提出问题,因此它不会在启动过程中正常启动。
要修复此问题,请重新打开Caddyfile
以进行编辑。
1sudo vi /etc/caddy/Caddyfile
首先,用您的域代替http://
的地址定义,从而删除由 HTTP 强迫的不安全连接,并为 TLS 证书提供域名,其次,使用服务器块内的tls
指令为 Caddy 提供电子邮件地址。
修改后的Caddyfile
应该如下,您的域名和电子邮件地址被替换为:
1[label /etc/caddy/Caddyfile]
2example.com {
3 root /var/www
4 gzip
5 tls sammy@example.com
6}
保存文件并离开编辑器. 若要应用更改,请重新启动 Caddy。
1sudo systemctl restart caddy
现在将您的浏览器导向https://example.com
,以验证是否正确地应用了更改。如果是这样,您应该再次看到 **Hello World!**页面。这次您可以通过查看URL或URL栏中的锁符来检查网站是否提供HTTPS。
结论
您现在已经配置了 Caddy 来通过安全的 TLS 连接正确服务您的网站. 它将自动从 Let's Encrypt 获取和更新证书,使用更新的 HTTP/2 协议通过安全连接服务您的网站,并通过使用 gzip 压缩来缩短加载时间。
这是一个简单的例子,你可以阅读更多关于Caddy的独特功能和Caddyfile的配置指南在Caddy官方文件(https://caddyserver.com/docs)。