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

相关推荐
猫不易13 小时前
在 Warp + tmux 下使用 Claude Code:一次剪贴板踩坑记录
前端
sa1002713 小时前
京东评论 API 实战:JSON 数据结构、字段含义与解析技巧
前端·数据结构·json
snow@li13 小时前
前端:MVP 深度全解 / 从核心理念到实战落地
前端
vennnnnnnnnnnnnn13 小时前
Excel 导入原文保留与内联排名配置问题复盘
前端·数据库·excel
玛丽莲茼蒿14 小时前
记录java后端一点点转全栈(前端)
前端
暗冰ཏོ14 小时前
2026前端开发全景指南:技术栈、100道面试题、AI趋势与职业规划
前端·面试·ai编程·前端面试题·前端行业规划
手可摘星辰的少年14 小时前
Ext2数据块寻址原理:直接块、间接块到三级间接块
linux
jiayong2314 小时前
前端面试题库 - Vue框架篇
前端·vue.js·面试
云飞云共享云桌面14 小时前
硬件采购省50%、设计效率提40%——通过云飞云共享云桌面一台云主机拖10人的真实跑法
运维·服务器·网络·人工智能·自动化
Irene199114 小时前
nano 和 vim(Linux 默认安装)的区别(文本编辑器 vs 专业编辑器)
linux·vim·nano