如何在 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 密钥添加到你的服务器。
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 源。
curl -1sLf 'https://dl.cloudsmith.io/public/caddy/stable/debian.deb.txt' | sudotee /etc/apt/sources.list.d/caddy-stable.list
  1. 更新服务器软件包索引。
sudo apt update
  1. 安装 Caddy。
sudo apt install caddy
  1. 查看已安装的 Caddy 版本,以验证安装是否成功。
caddy -v

输出:

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

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

管理 Caddy 系统服务

  1. 启用 Caddy 在启动时自动启动。
sudo systemctl enable caddy
  1. 启动 Caddy Web 服务器。
sudo systemctl start caddy
  1. 查看 Caddy 系统服务状态,以验证应用程序正在运行。
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 应用程序文件目录。
sudo mkdir -p /var/www/example.com
  1. 创建一个新的 HTML 应用程序文件 index.html
sudo nano /var/www/example.com/index.html
  1. 将以下代码添加到文件中。
<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 配置文件目录。
cd /etc/caddy/
  1. 备份默认的 Caddyfile 配置。
sudo mv Caddyfile Caddyfile.default
  1. 创建一个新的 Caddyfile 配置。
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 配置是否存在错误。
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 服务器以应用你的配置更改。
sudo caddy reload

保护 Caddy Web 服务器

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

  1. 授予 Caddy 用户对 /etc/caddy 目录的完全权限。
sudo chown -R caddy:caddy /etc/caddy
  1. 授予 Caddy 用户对 Caddyfile 的读写权限,同时禁用其他系统用户的访问权限。
sudo chmod 660 /etc/caddy/Caddyfile
  1. 长列出 /etc/caddy 目录以验证权限更改。
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 状态并验证它是否处于活动状态。
sudo ufw status

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

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

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

结论

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


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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/951466.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

《机器学习》——贝叶斯算法

贝叶斯简介 贝叶斯公式&#xff0c;又称贝叶斯定理、贝叶斯法则&#xff0c;最初是用来描述两个事件的条件概率间的关系的公式&#xff0c;后来被人们发现具有很深刻的实际意义和应用价值。该公式的实际内涵是&#xff0c;支持某项属性的事件发生得愈多&#xff0c;则该属性成…

边缘计算网关在机床设备数据采集中的应用

边缘计算网关是连接边缘设备和云端的一个中间节点&#xff0c;负责在边缘设备和云服务器之间进行数据传输和处理。它具备数据采集、数据处理、协议转换、数据存储、安全功能及远程管理等多种能力&#xff0c;是边缘计算系统中不可或缺的关键设备。 一、功能与优势 数据采集&a…

腾讯二面:MySQL的半同步是什么?不是MySQL的两阶段提交,那是什么?

前言 年后在进行腾讯二面的时候&#xff0c;写完算法的后问的第一个问题就是&#xff0c;MySQL的半同步是什么&#xff1f;我当时直接懵了&#xff0c;我以为是问的MySQL的两阶段提交的问题呢&#xff1f;结果确认了一下后不是两阶段提交&#xff0c;然后面试官看我连问的是啥都…

云计算基础,虚拟化原理

文章目录 一、虚拟化1.1 什么是虚拟化1.2 虚拟化类型 二 、存储虚拟化2.1 存储指标2.2 存储类型2.3 存储协议2.4 RAID 三、内存 i/O虚拟化3.1 内存虚拟化基本概念地址空间转换原理内存共享与隔离原理 3.2 I/O 虚拟化基本概念模拟&#xff08;Emulation&#xff09;方式半虚拟化…

【网络协议】IPv4 地址分配 - 第二部分

前言 在第 1 部分中&#xff0c;我们学习了 IPv4 地址的分配方式&#xff0c;了解了各种类型的 IPv4 地址&#xff0c;并进行了基础的子网划分&#xff08;Subnetting&#xff09;。在第 2 部分中&#xff0c;我们将继续学习子网划分&#xff0c;并引入一些新的概念。 【网络…

JAVA 使用apache poi实现EXCEL文件的输出;apache poi实现标题行的第一个字符为红色;EXCEL设置某几个字符为别的颜色

设置输出文件的列宽&#xff0c;防止文件过于丑陋 Sheet sheet workbook.createSheet(FileConstants.ERROR_FILE_SHEET_NAME); sheet.setColumnWidth(0, 40 * 256); sheet.setColumnWidth(1, 20 * 256); sheet.setColumnWidth(2, 20 * 256); sheet.setColumnWidth(3, 20 * 25…

Cursor 实战技巧:好用的提示词插件Cursor Rules

你好啊&#xff0c;见字如面。感谢阅读&#xff0c;期待我们下一次的相遇。 最近在小红书发现了有人分享这款Cursor提示词的插件&#xff0c;下面给各位分享下使用教程。简单来说Cursor Rules就是可以为每一个我们自己的项目去配置一个系统级别的提示词&#xff0c;这样在我们…

【简博士统计学习方法】第1章:3. 统计学习方法的三要素

3. 统计学习方法的三要素 3.1 监督学习的三要素 3.1.1 模型 假设空间&#xff08;Hypothesis Space&#xff09;&#xff1a;所有可能的条件概率分布或决策函数&#xff0c;用 F \mathcal{F} F表示。 若定义为决策函数的集合&#xff1a; F { f ∣ Y f ( X ) } \mathcal{F…

60.在 Vue 3 中使用 OpenLayers 绘制自由线段、自由多边形

前言 在现代 Web 开发中&#xff0c;地图功能已经成为许多应用的重要组成部分。OpenLayers 是一个强大的开源地图库&#xff0c;支持多种地图源和地图操作。结合 Vue 3 的响应式特性&#xff0c;我们可以轻松实现地图的交互功能。本文将详细介绍如何在 Vue 3 中使用 OpenLayer…

krpano 实现文字热点中的三角形和竖杆

krpano 实现文字热点中的三角形和竖杆 实现文字热点中的三角形和竖杆 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 一个后端写前端真的是脑阔疼 实现文字热点中的三角形和竖杆 上图看效果 v&#xff1a;2549789059

【算法】字符串算法技巧系列

阿华代码&#xff0c;不是逆风&#xff0c;就是我疯 你们的点赞收藏是我前进最大的动力&#xff01;&#xff01; 希望本文内容能够帮助到你&#xff01;&#xff01; 目录 引入&#xff1a;字符串相关算法技巧 1&#xff1a;字符串转数组 2&#xff1a;子字符串 3&#xff…

Linux x86_64 程序静态链接之重定位

文章目录 一、简介二、链接器2.1 简介2.2 可重定位目标模块2.3 符号解析2.4 重定位 三、重定位 demo 演示3.1 外部函数重定位3.2 static 函数重定位 四、补充参考链接 一、简介 编程的代码无非是由函数和各种变量&#xff0c;以及对这些变量的读、写所组成&#xff0c;而不管是…

【OJ刷题】同向双指针问题

这里是阿川的博客&#xff0c;祝您变得更强 ✨ 个人主页&#xff1a;在线OJ的阿川 &#x1f496;文章专栏&#xff1a;OJ刷题入门到进阶 &#x1f30f;代码仓库&#xff1a; 写在开头 现在您看到的是我的结论或想法&#xff0c;但在这背后凝结了大量的思考、经验和讨论 目录 1…

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found

问题描述&#xff1a;安装MMYOLO或者MMROTATE时&#xff0c;出现的问题&#xff1a; (base) rootautodl-container-78fc438fda-4132d99a:~/autodl-tmp/MMROTATE_PROJECT/mmrotate-1.x# python demo/image_demo.py demo/demo.jpg oriented-rcnn-le90_r50_fpn_1x_dota.py orient…

微信小程序防止重复点击事件

直接写在app.wpy里面&#xff0c;全局可以调用 // 防止重复点击事件preventActive(fn) {const self this;if (this.globalData.PageActive) {this.globalData.PageActive false;if (fn) fn();setTimeout(() > {self.globalData.PageActive true;}, 3000); //设置该时间内…

互联网架构变迁:从 TCP/IP “呼叫” 到 NDN “内容分发” 的逐浪之旅

本文将给出关于互联网架构演进的一个不同视角。回顾一下互联网的核心理论基础产生的背景&#xff1a; 左边是典型的集中控制通信网络&#xff0c;很容易被摧毁&#xff0c;而右边的网络则没有单点问题&#xff0c;换句话说它很难被全部摧毁&#xff0c;与此同时&#xff0c;分…

css出现边框

前言 正常情况下&#xff0c;开启 contenteditable 属性后会出现 “黑色边框”。 如下图所示&#xff0c;很影响美观&#xff1a; 您可能想去掉它&#xff0c;就像下面这样&#xff1a; 解决方案 通过选择器&#xff0c;将 focus 聚焦时移除 outline 属性即可。 如下代码所示&a…

《机器学习》——随机森林

文章目录 什么是随机森林&#xff1f;随机森林的原理随机森林的优缺点优点缺点 随机森林模型API主要参数 实例实例步骤导入数据处理数据&#xff0c;切分数据构建模型训练模型测试数据并输出分类报告和混淆矩阵画出模型的前十重要性的特征 扩展 什么是随机森林&#xff1f; -随…

uniapp - 基于uniapp+vue3实现自定义增强版table表格组件体验「兼容H5+小程序+App端」

本文提供增强版table表格组件体验,打造跨端表格的新标杆. uv3-table&#xff1a;一款基于uniappvue3跨端自定义手机端增强版表格组件。支持固定表头/列、边框、斑马纹、单选/多选&#xff0c;自定义表头/表体插槽、左右固定列阴影高亮显示。支持编译兼容H5小程序端App端。 提供…

【机器学习】Gaussian Process (GP)

高斯过程&#xff08;Gaussian Process, GP&#xff09; 高斯过程是一种用于监督学习的非参数贝叶斯方法&#xff0c;特别适用于回归和分类任务。GP 提供了一种灵活的建模方式&#xff0c;可以自然地量化预测中的不确定性。 核心思想 高斯过程是定义在函数空间上的分布&#…