如何在 Rocky Linux 上安装最新的 Caddy Web 服务器¶
简介¶
Caddy 是一个为现代 Web 应用程序设计的 Web 服务器。Caddy 配置简单,并具有自动 Let's Encrypt 功能,因此您的网站默认情况下始终安全。它是作者的首选 Web 服务器。
以下是 Caddy 功能的简要概述
- 一个基本的 Web 服务器
- 用于将流量定向到多个站点的反向代理
- 适用于许多工作负载的模块,包括 TCP、SSH 等
- 用于管理多个网站流量的内置负载均衡器
- 内置的自动 Let's Encrypt 支持
- 用于以编程方式重新配置服务器的 API
- PHP FastCGI 支持
- 以及 IPv6
先决条件和假设¶
您将需要
- 一台连接到互联网的 Rocky Linux 计算机或服务器。
- 对命令行的基本熟悉。
- 能够以 root 用户或使用
sudo
运行命令。 - 您选择的文本编辑器,无论是图形界面还是命令行界面。在本教程中,作者使用
vim
。 - 一个指向您服务器公共 IP 地址的域名或其他主机名。
安装 Caddy¶
首先,确保您的机器已更新至最新版本
sudo dnf update
然后,安装 epel-release
软件仓库
sudo dnf install -y epel-release
接下来,安装 caddy
Web 服务器
sudo dnf install -y caddy
配置防火墙¶
如果您尝试从另一台计算机查看机器的 IP 地址或域名上的网页,您可能会一无所获。如果您运行了防火墙,就会出现这种情况。
要打开必要的端口以真正“看到”您的网页,您将使用 Rocky Linux 的内置防火墙 firewalld
。用于执行此操作的 firewalld
命令是 firewall-cmd
。
要打开 http
和 https
服务(处理网页的服务),请运行
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --permanent --zone=public --add-service=https
分解一下
-–permanent
标志告诉防火墙在每次防火墙重启时以及服务器重启时应用此配置。–-zone=public
告诉防火墙允许每个人对该端口的传入连接。- 最后,
--add-service=http
和--add-service=https
告诉firewalld
将所有 HTTP 和 HTTPS 流量传递到服务器。
这些配置在您强制执行之前不会生效。为此,请告诉 firewalld
重新加载其配置
sudo firewall-cmd --reload
注意
现在,这很可能不会奏效。在这些极少数情况下,让 firewalld
服从您的命令,使用旧的关机并重新启动方法。
systemctl restart firewalld
要确保允许这些端口,请运行 firewall-cmd --list-all
。正确配置的防火墙将看起来有点像这样
public (active)
target: default
icmp-block-inversion: no
interfaces: enp9s0
sources:
services: cockpit dhcpv6-client ssh http https
ports:
protocols:
forward: no
masquerade: no
forward-ports:
source-ports:
icmp-blocks:
rich rules:
这应该是您在防火墙方面所需的一切。
配置 Caddy¶
与 Apache 和 Nginx 等传统 Web 服务器不同,Caddy 的配置格式要简单得多。过去您需要配置所有细枝末节的日子一去不复返了,比如您的 Web 服务器的线程模型或 SSL 证书,除非您想这么做。
要编辑 Caddy 配置文件,请执行以下操作
vim /etc/caddy/Caddyfile
一个最小的静态 Web 服务器配置可能类似于以下内容
example.com {
root * /usr/share/caddy/example.com
file_server
}
将 "example.com" 替换为指向您服务器的主机名。
您还必须在 Caddy 的“根”目录中的文件夹中添加一个网站。为简单起见,添加一个单页静态网站
mkdir -p /usr/share/caddy/example.com
echo "<h1>Hi!</h1>" >> /usr/share/caddy/example.com/index.html
之后,启用 Caddy 的 systemd 服务
systemctl enable --now caddy
在一分钟内,Caddy 将从 Let's Encrypt 获取 SSL 证书。然后,您可以在浏览器中查看您刚刚设置的网站
它应该有一个 SSL 挂锁,应该在所有现代浏览器中工作,不仅如此,而且还在 Qualys SSL 服务器测试 中获得 A+ 等级。
可选:PHP FastCGI¶
如前所述,Caddy 支持 PHP 的 FastCGI 支持。好消息是,与 Apache 和 Nginx 不同,Caddy 会自动处理 PHP 文件扩展名。
要安装 PHP,首先添加 Remi 仓库(注意:如果您运行的是 Rocky Linux 8.x,请在下面的“release-” 旁边替换为 8)
dnf install https://rpms.remirepo.net/enterprise/remi-release-9.rpm
接下来,我们需要安装 PHP(注意:如果您使用的是另一个版本的 PHP,请将您想要的版本替换为 php83)
dnf install -y php83-php-fpm
如果您需要其他 PHP 模块(例如,GD),请将它们添加到上述命令中。
然后,我们需要配置 PHP 以侦听 TCP 套接字
vim /etc/opt/remi/php83/php-fpm.d/www.conf
接下来,找到以下行
listen = /var/opt/remi/php83/run/php-fpm/www.sock
用以下内容替换它
listen = 127.0.0.1:9000
然后保存并退出 www.conf
文件,并打开 Caddyfile
vim /etc/caddy/Caddyfile
导航到我们之前创建的服务器块
example.com {
root * /usr/share/caddy/example.com
file_server
}
在 "file_server" 行之后添加以下行
php_fastcgi 127.0.0.1:9000
你的支持 PHP 的服务器块将如下所示
example.com {
root * /usr/share/caddy/example.com
file_server
php_fastcgi 127.0.0.1:9000
}
然后保存并退出 Caddyfile,并重启 Caddy
systemctl restart caddy
为了测试 PHP 是否工作,让我们添加一个简单的 PHP 文件
echo "<?php phpinfo(); ?>" >> /usr/share/caddy/rockyexample.duckdns.org/phpinfo.php
在浏览器中打开你创建的文件,你应该会看到 PHP 信息
结论¶
Caddy 的基本安装和配置非常简单。过去你可能要花几个小时配置 Apache 的日子已经一去不复返了。没错,Nginx 当然是一个改进,但它仍然缺乏像 Let's Encrypt 和 Kubernetes ingress 支持这样的现代且基本功能,而 Caddy 在构建时就包含了这些功能,而在 Nginx(和 Apache)上,你必须单独添加它们。
从 2019 年开始,我一直将 Caddy 作为我的首选 Web 服务器,它真的太好了。事实上,每当我使用 Apache、Nginx 或 IIS 时,感觉就像坐上了时光机回到了 2010 年或更早。
作者:Neel Chauhan
贡献者:Steven Spencer,Ganna Zhyrnova