跳到内容

如何在 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

要打开 httphttps 服务(处理网页的服务),请运行

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 证书。然后,您可以在浏览器中查看您刚刚设置的网站

Caddy serving our demo website

它应该有一个 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 serving our PHP file

结论

Caddy 的基本安装和配置非常简单。过去你可能要花几个小时配置 Apache 的日子已经一去不复返了。没错,Nginx 当然是一个改进,但它仍然缺乏像 Let's Encrypt 和 Kubernetes ingress 支持这样的现代且基本功能,而 Caddy 在构建时就包含了这些功能,而在 Nginx(和 Apache)上,你必须单独添加它们。

从 2019 年开始,我一直将 Caddy 作为我的首选 Web 服务器,它真的太好了。事实上,每当我使用 Apache、Nginx 或 IIS 时,感觉就像坐上了时光机回到了 2010 年或更早。

作者:Neel Chauhan

贡献者:Steven Spencer,Ganna Zhyrnova