如何在 Ubuntu 22.04 上安装 Caddy Web 服务器教程

简介

Caddy 是一个开源的 Web 服务器,它支持静态和现代 Web 应用程序,使用预定义的配置规则,并为所有链接的域名自动启用 HTTPS。Caddy 使用 GO 语言编写,提供了用户友好的配置指令,使你既可以将其用作 Web 服务器,也可以用作反向代理或负载均衡器,以便在服务器上为 Web 应用程序提供服务。

本文将介绍如何在 Ubuntu 22.04 上安装 Caddy Web 服务器,并在服务器上安全地为 Web 应用程序提供服务。

安装 Caddy

Caddy 在默认的 Ubuntu 22.04 APT 仓库中不可用,但可以通过源代码文件安装,或者在你的服务器上添加最新的仓库信息进行安装。请按照以下步骤下载最新的 Caddy 仓库信息,并在你的服务器上安装该应用程序。

  1. 将最新的 Caddy GPG 密钥添加到你的服务器。
bash 复制代码
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/gpg.key' | sudo gpg--dearmor -o /usr/share/keyrings/caddy-stable-archive-keyring.gpg
  1. 将 Caddy 仓库添加到你的 APT 源。
bash 复制代码
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudotee /etc/apt/sources.list.d/caddy-stable.list
  1. 更新服务器软件包索引。
bash 复制代码
sudo apt update
  1. 安装 Caddy。
bash 复制代码
sudo apt install caddy
  1. 查看已安装的 Caddy 版本,以验证安装是否成功。
bash 复制代码
caddy -v

输出:

v2.8.4 h1:q3pe0wpBj1OcHFZ3n/1nl4V4bxBrYoSoab7rL9BMYNk=
  1. 允许通过防火墙传入 HTTP 端口 80 的连接。
bash 复制代码
sudo ufw allow 80
  1. 重启防火墙以应用更改。
bash 复制代码
sudo ufw reload
  1. 访问你的服务器 IP 以测试对 Caddy Web 服务器的访问。

    http://SERVER-IP

确认默认的 Caddy 网页在你的浏览器中显示。

管理 Caddy 系统服务

  1. 启用 Caddy 在启动时自动启动。
bash 复制代码
sudo systemctl enable caddy
  1. 启动 Caddy Web 服务器。
bash 复制代码
sudo systemctl start caddy
  1. 查看 Caddy 系统服务状态,以验证应用程序正在运行。
bash 复制代码
sudo systemctl status caddy

输出:

● caddy.service - Caddy
     Loaded: loaded (/usr/lib/systemd/system/caddy.service; enabled; preset: enabled)
     Active: active (running) since Mon 2024-06-10 14:46:16 UTC; 8min ago
       Docs: https://caddyserver.com/docs/
   Main PID: 30024 (caddy)
      Tasks: 7 (limit: 1061)
     Memory: 11.7M (peak: 13.9M)
        CPU: 138ms
     CGroup: /system.slice/caddy.service
             └─30024 /usr/bin/caddy run --environ --config /etc/caddy/Caddyfile

创建 Caddy 虚拟主机

Caddy 默认将配置文件存储在 /etc/caddy 目录中,并支持从服务器上的任何位置加载 Caddyfile 配置。请按照以下步骤创建一个新的 Caddy 虚拟主机,以便从服务器上的 /var/www/example.com 目录提供 Web 应用程序文件。

  1. 创建 /var/www/example.com Web 应用程序文件目录。
bash 复制代码
sudo mkdir -p /var/www/example.com
  1. 创建一个新的 HTML 应用程序文件 index.html
bash 复制代码
sudo nano /var/www/example.com/index.html
  1. 将以下代码添加到文件中。
html 复制代码
<html>
<head>
    <title>Greetings from Vultr!</title>
</head>
<body>
    <br>
    <br>
    <br>
    <h1 align="center">Hello World!, Greetings from Vultr</h1>
</body>
</html>

保存并关闭该文件。

  1. 切换到 Caddy 配置文件目录。
bash 复制代码
cd /etc/caddy/
  1. 备份默认的 Caddyfile 配置。
bash 复制代码
sudo mv Caddyfile Caddyfile.default
  1. 创建一个新的 Caddyfile 配置。
bash 复制代码
sudo nano Caddyfile
  1. 将以下配置添加到文件中。

    example.com {
    tls admin@example.com
    root * /var/www/example.com
    file_server {
    index index.html
    }
    log {
    output file /var/log/caddy/example.log
    format console
    }
    }

保存并退出该文件。

上面的 Caddy 配置使用你的域名 example.com 创建一个新的虚拟主机。在配置中:

  • example.com:使用你的 IP 地址或域名创建一个新的虚拟主机配置文件。
  • tls:指定与 Let's Encrypt SSL 证书生成请求关联的电子邮件地址。
  • root:设置虚拟主机 Web 应用程序文件目录。
  • file_server:启用 Web 应用程序文件服务器。在该指令中,index 指定在访问你的域名时要提供的默认文件。
  • log:启用将访问和错误详细信息记录到特定文件,例如 /var/log/caddy/example.log
  1. 测试 Caddy 配置是否存在错误。
bash 复制代码
caddy validate

输出:

...........
2024/06/1 15:19:11.478 INFO    tls.cache.maintenance   started background certificate maintenance      {"cache": "0xc0000e5300"}
2024/06/1 15:19:11.478 INFO    tls.cache.maintenance   stopped background certificate maintenance      {"cache": "0xc0000e5300"}
Valid configuration
  1. 重新加载 Caddy Web 服务器以应用你的配置更改。
bash 复制代码
sudo caddy reload

保护 Caddy Web 服务器

Caddy 使用自动 HTTPS 来保护所有连接,方法是在服务器上具有有效域名的虚拟主机配置文件上使用 SSL 证书。请按照以下步骤保护 Caddy Web 服务器,方法是限制对 Caddyfile 配置的访问,以防止意外或未经授权的用户更改。

  1. 授予 Caddy 用户对 /etc/caddy 目录的完全权限。
bash 复制代码
sudo chown -R caddy:caddy /etc/caddy
  1. 授予 Caddy 用户对 Caddyfile 的读写权限,同时禁用其他系统用户的访问权限。
bash 复制代码
sudo chmod 660 /etc/caddy/Caddyfile
  1. 长列出 /etc/caddy 目录以验证权限更改。
bash 复制代码
ls -l /etc/caddy/

输出:

total 8
-rw-rw---- 1 caddy caddy 168 Jun 2 15:20 Caddyfile
-rw-r--r-- 1 caddy caddy 769 Jun  2 12:07 Caddyfle.default

设置防火墙规则

Caddy 根据你的 Caddyfile 配置,使用 HTTP 端口 80 和 HTTPS 端口 443 在服务器上提供文件。请按照以下步骤允许所有 Caddy 端口通过防火墙,并启用与 Web 服务器的网络连接。

  1. 查看 UFW 状态并验证它是否处于活动状态。
bash 复制代码
sudo ufw status

如果状态为 inactive,则允许 SSH 端口 22 并启用 UFW。

bash 复制代码
sudo ufw allow 22 && sudo ufw enable
  1. 允许传入 HTTP 端口 80 的连接。
bash 复制代码
sudo ufw allow 80
  1. 允许传入 HTTPS 端口 443 的连接。
bash 复制代码
sudo ufw allow 443
  1. 重新加载防火墙以应用更改
bash 复制代码
sudo ufw reload
  1. 使用浏览器(如 Chrome)访问你的域名,以验证 Caddy 是否提供你的虚拟主机 Web 应用程序文件。

    https://example.com

如果你收到连接错误,请查看 Caddy 配置日志以验证错误详细信息。

结论

你已在 Ubuntu 22.04 服务器上安装了 Caddy Web 服务器,并设置了一个虚拟主机配置文件,以便在服务器上提供 Web 应用程序文件。访问 Caddy 文档 以获取更多信息和配置选项。


我的博客:https://blog.ivwv.site

相关推荐
Christal_pyy6 分钟前
树莓派4基于Debian GNU/Linux 12 (Bookworm)添加多个静态ipv4网络
linux·网络·debian
csbDD1 小时前
2025年网络安全(黑客技术)三个月自学手册
linux·网络·python·安全·web安全
李狗蛋儿啊1 小时前
zero自动化框架搭建---Git安装详解
运维·git·自动化
anyup_前端梦工厂2 小时前
了解几个 HTML 标签属性,实现优化页面加载性能
前端·html
小金的学习笔记2 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
s_fox_2 小时前
nginx ngx_http_module(7) 指令详解
运维·nginx·http
EasyNVR2 小时前
EasyRTC智能硬件:实时畅联、沉浸互动、消音护航
运维·服务器·网络·安全·音视频·webrtc·p2p
前端御书房2 小时前
前端PDF转图片技术调研实战指南:从踩坑到高可用方案的深度解析
前端·javascript
2301_789169542 小时前
angular中使用animation.css实现翻转展示卡片正反两面效果
前端·css·angular.js
CarryBest2 小时前
Jenkins 环境搭建---基于 Docker
运维·jenkins