Caddy是一个易于使用的新Web服务器。它非常简单,可以用作快速开发服务器,并且足够强大,可以在生产环境中使用。
Caddy所服务的每个网站都可以通过安全连接自动提供服务,无需其他配置或操作。
在本教程中,您将安装和配置Caddy。
要学习本教程,您需要:
nano
。CentOS 默认带有文本编辑器vi
,但nano
对于用户更加友好。Caddy项目提供了一个安装脚本,用于检索和安装Caddy服务器的二进制文件。要执行它,请输入:
$ curl -s https://getcaddy.com | bash
您可以通过访问https://getcaddy.com
,使用wget
或curl
在执行文件之前或之前下载文件来查看脚本。
在安装过程中,脚本将用sudo
获取管理权限,以便将Caddy文件放在系统范围的目录中,因此它可能会提示您输入密码。
命令输出结果如下所示:
Caddy installation script output
Downloading Caddy for linux/amd64...
https://caddyserver.com/download/linux/amd64?plugins=
Extracting...
Putting caddy in /usr/local/bin (may require password)
[sudo] password for sammy:
Caddy 0.10.2
Successfully installed
脚本完成后,Caddy二进制文件将安装在服务器上并准备使用。您可以使用which
检查其位置来验证Caddy二进制文件是否已到位。
$ which caddy
输出结果说明了Caddy二进制文件可以在/usr/local/bin/caddy
中找到。
Caddy在安装期间不会创建任何系统范围的配置,也不会将其自身安装为服务,这意味着它不会自动启动。在接下来的几个步骤中,我们将创建用于Caddy的用户帐户,Caddy需要运行的文件并安装其服务文件。
虽然两个最受欢迎的HTTP服务器Apache和Nginx在从系统软件包安装期间创建了自己的非特权用户,但Caddy并没有这样做。出于安全原因,也不应该使用超级用户root
帐户启动它。在此步骤中,我们将创建一个用户caddy
,该用户将仅用于运行Caddy并访问其文件。
要创建名为caddy
的用户类型:
$ sudo adduser -r -d /var/www -s /sbin/nologin caddy
-r
使新创建的帐户成为系统帐户,-d
表示主目录里的用户,在我们的例子中它是/var/www
,我们会在后面创建它。无特权的用户不能够登录和访问系统shell,我们通过使用-s
设置所需的shell来确保/sbin/nologin
系统命令不允许系统登录。最后一个参数是用户名本身 - 在我们的例子中为caddy
。
现在,当我们为Caddy Web服务器提供用户时,我们可以在下一步中配置用于存储Caddy配置文件的必要目录。
Caddy的单元文件(我们将在下一步中安装)期望特定目录和文件以特定权限存在。我们将在此步骤中创建它们。
首先,创建一个包含main的目录Caddyfile
,这是一个配置文件,告诉Caddy它应该服务哪些网站以及如何服务。
$ sudo mkdir /etc/caddy
将此目录的所有者更改为root用户,将其组更改为www-data,以便Caddy可以读取它。
$ sudo chown -R root:caddy /etc/caddy
在此目录中,创建一个空的Caddyfile
,稍后我们将对其进行编辑。
$ sudo touch /etc/caddy/Caddyfile
在中/etc/ssl
创建另一个目录。
$ sudo mkdir /etc/ssl/caddy
Caddy在获取证书时需要能够写入该目录,因此让所有者成为caddy用户。您可以将组保留为root用户,与默认值保持不变:
$ sudo chown -R caddy:root /etc/ssl/caddy
然后确保没有其他人可以通过删除其他人的所有访问权限来读取这些文件。
$ sudo chmod 0770 /etc/ssl/caddy
我们需要创建的最终目录是网站本身将被发布的目录。我们将使用/var/www
,这是惯用的,也是使用其他Web服务器(如Apache或Nginx)时的默认路径。
$ sudo mkdir /var/www
这个目录应该由Caddy完全拥有。
$ sudo chown caddy:caddy /var/www
您现在已经为Caddy准备了必要的环境。在下一步中,我们将Caddy配置为系统服务,以确保它从系统启动开始,并可以使用systemctl
进行管理。
虽然Caddy没有将自己安装为服务,但该项目提供了一个官方systemd
单元文件。此文件假设我们在上一步中设置的目录结构,因此请确保您的配置匹配。
从官方Caddy存储库下载文件。curl
命令的附加-o
参数将文件保存在/etc/systemd/system/
目录中并使其对systemd
可见。
$ sudo curl -s https://raw.githubusercontent.com/mholt/caddy/master/dist/init/linux-systemd/caddy.service -o /etc/systemd/system/caddy.service
在我们继续之前,我们必须稍微修改文件,以使其使用我们的非特权caddy
用户来运行服务器。
用您喜欢的文本编辑器打开文件:
$ sudo vi /etc/systemd/system/caddy.service
并找到负责指定用户帐户和组的片段:
; User and group the process will run as.
User=www-data
Group=www-data
将两个值更改为如下:
; User and group the process will run as.
User=caddy
Group=caddy
保存并关闭文件以退出。现在,服务文件已准备好与我们的安装一起使用。请让systemd
知道新的服务文件。
$ sudo systemctl daemon-reload
然后,启用Caddy。
$ sudo systemctl enable caddy.service
您可以通过检查其状态来验证服务是否已正确加载启动。
$ sudo systemctl status caddy.service
输出结果应如下所示:
Caddy service status output
● caddy.service - Caddy HTTP/2 web server
Loaded: loaded (/etc/systemd/system/caddy.service; enabled; vendor preset: disabled)
Active: inactive (dead)
Docs: https://caddyserver.com/docs
具体来说,它表示服务已加载并启用,但尚未运行。我们暂时不会启动服务器,因为配置仍然不完整。
您现在已将Caddy配置为系统服务,该服务将在启动时自动启动,而无需手动运行。接下来,我们将允许Web流量通过防火墙。
我们必须手动添加防火墙规则以通过Caddy传递的互联网流量。
Caddy使用HTTP和HTTPS协议为网站提供服务,因此我们需要允许访问适当的端口,以便从互联网上获取Caddy。
$ sudo firewall-cmd --permanent --zone=public --add-service=http
$ sudo firewall-cmd --permanent --zone=public --add-service=https
$ sudo firewall-cmd --reload
所有三个命令都将输出以下结果:
firewall-cmd output
success
这将允许Caddy自由地为访问者提供网站。在下一步中,我们将创建一个示例网页并更新Caddyfile
来提供服务,以便测试Caddy安装。
让我们首先创建一个非常简单的HTML页面,它将显示一个简单的Hello World!信息。这个命令将在我们之前创建的网站目录中创建一个文件index.html
,里面只有一行文本<h1>Hello World!</h1>
。
$ echo '<h1>Hello World!</h1>' | sudo tee /var/www/index.html
接下来,我们将填写Caddyfile
。Caddyfile
以其最简单的形式由一个或多个服务器块组成,每个服务器块定义单个网站的配置。 服务器块以地址定义开头,后跟大括号。在大括号内,您可以包含要应用于该网站的配置指令。
地址定义在表格protocol://host:port
中指定。如果您将某些字段留空,Caddy将自行承担一些默认值。例如,如果您指定协议但不指定端口,则后者将自动派生(即假定端口80
为HTTP,并假定端口443
为HTTPS)。管理地址格式的规则在官方Caddyfile文档中有详细描述。
使用vi
或您喜欢的文本编辑器打开在步骤2中创建的Caddyfile
。
$ sudo vi /etc/caddy/Caddyfile
粘贴以下内容:
http:// {
root /var/www
gzip
}
然后保存文件并退出。让我们来解释一下Caddyfile
具体的作用。
在这里,http://
用于地址定义。这告诉Caddy它应该绑定到端口80
并使用普通HTTP协议(没有TLS加密)服务所有请求,无论用于连接到服务器的域名如何。这将允许您使用服务器的IP地址访问Caddy托管的网站。
在我们的服务器块的括号内,有两个指令:
root
指令告诉Caddy网站文件的位置。在我们的示例/var/www
中,我们创建了测试页面。gzip
指令告诉Caddy使用Gzip压缩来加快网站速度。它不需要额外的配置。配置文件准备就绪后,启动Caddy服务。
$ sudo systemctl start caddy
我们现在可以测试网站是否有效。为此,您使用服务器的公共IP地址。如果您不知道服务器的IP地址,可以使用curl -4 icanhazip.com
。之后,访问http://your_server_ip
来查看Hello World!网站。
这意味着您的Caddy安装正常。
您现在已将Caddy配置正确地为您的网站提供服务。它将通过使用gzip压缩减少加载时间。
这是开始使用Caddy的一个简单示例。您可以在官方Caddy文档中阅读有关Caddy独特功能和配置指令的更多信息。
参考文献:《How To Host a Website with Caddy on CentOS 7》
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。